>백엔드 개발 >C++ >`std::async`에 상수가 아닌 참조를 전달할 수 없는 이유는 무엇이며 어떻게 해결합니까?

`std::async`에 상수가 아닌 참조를 전달할 수 없는 이유는 무엇이며 어떻게 해결합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-28 12:18:301001검색

Why can't I pass a non-const reference to `std::async` and how do I work around it?

참조로 std::async에 인수 전달 시의 비호환성

const가 아닌 참조를 std에 대한 인수로 전달할 수 없음: :async는 개발자를 당황하게 만들었습니다. 다음 예를 고려하십시오.

<code class="cpp">#include <functional>
#include <future>

void foo(int& value) {}

int main() {
    int value = 23;
    std::async(foo, value);
}</code>

컴파일러는 다음 코드와 함께 오류를 보고합니다.

error: no type named ‘type’ in ‘class std::result_of<void (*)(int)>()’

std::reference_wrapper에 인수를 포함하면 문제가 해결되지만 기본 코드에 대한 질문이 제기됩니다. 메커니즘.

값 기반 인수 전달에 대한 추론

std::async의 디자인은 의도적으로 모든 인수를 값으로 전달하도록 기본 설정되어 있습니다. 이 선택은 인수 복사본이 매달리거나 경쟁 조건을 나타낼 수 없으므로 안전을 보장합니다.

비상수 참조 매개변수 처리

그러나 인수를 전달하는 시나리오가 있습니다. 비 const 참조가 필요합니다. 이것이 std::ref가 작동하는 곳입니다. std::ref를 사용하면 개발자는 잠재적인 결과에 대한 이해를 인정하면서 non-const 참조를 전달하는 위험한 의미 체계를 명시적으로 선택할 수 있습니다.

위 내용은 `std::async`에 상수가 아닌 참조를 전달할 수 없는 이유는 무엇이며 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.