/Zc:rvalueCast(형식 변환 규칙 적용)
/Zc:rvalueCast
옵션을 지정하면 컴파일러는 캐스트 작업의 결과로 rvalue 참조 형식을 올바르게 식별합니다. 해당 동작은 C++11 표준을 준수합니다. 옵션이 지정되지 않은 경우 컴파일러 동작은 Visual Studio 2012와 동일합니다.
구문
/Zc:rvalueCast
/Zc:rvalueCast-
설명
지정된 경우 /Zc:rvalueCast
컴파일러는 C++11 표준의 섹션 5.4를 따르고, 참조가 아닌 형식을 초래하는 캐스트 식과 비 함수 형식에 대한 rvalue 참조를 rvalue 형식으로 만드는 캐스트 식만 처리합니다. 기본적으로 또는 지정된 경우 /Zc:rvalueCast-
컴파일러는 비준수이며 rvalue 참조를 생성하는 모든 캐스트 식을 rvalues로 처리합니다. 규격을 준수하고 캐스트 /Zc:rvalueCast
사용 시 오류를 제거하려면 .
기본적으로 꺼져 /Zc:rvalueCast
있습니다(/Zc:rvalueCast-
). /permissive- 컴파일러 옵션은 암시적으로 이 옵션을 설정하지만 /Zc:rvalueCast-
.
rvalue 참조 형식을 사용하는 함수에 인수로 캐스트 식을 전달하는 경우에 사용합니다 /Zc:rvalueCast
. 컴파일러가 캐스트 식의 형식을 잘못 결정할 때 기본 동작으로 인해 컴파일러 오류 C2664 가 발생합니다. 이 예제에서는 지정되지 않은 경우 /Zc:rvalueCast
올바른 코드에서 컴파일러 오류를 보여줍니다.
// Test of /Zc:rvalueCast
// compile by using:
// cl /c /Zc:rvalueCast- make_thing.cpp
// cl /c /Zc:rvalueCast make_thing.cpp
#include <utility>
template <typename T>
struct Thing {
// Construct a Thing by using two rvalue reference parameters
Thing(T&& t1, T&& t2)
: thing1(t1), thing2(t2) {}
T& thing1;
T& thing2;
};
// Create a Thing, using move semantics if possible
template <typename T>
Thing<T> make_thing(T&& t1, T&& t2)
{
return (Thing<T>(std::forward<T>(t1), std::forward<T>(t2)));
}
struct Test1 {
long a;
long b;
Thing<long> test() {
// Use identity casts to create rvalues as arguments
return make_thing(static_cast<long>(a), static_cast<long>(b));
}
};
보고하지 않는 것이 적절한 경우 기본 컴파일러 동작이 오류 C2102를 보고하지 않을 수도 있습니다. 이 예제에서는 ID 캐스트에서 만든 rvalue의 주소가 지정되지 않은 경우 컴파일러가 /Zc:rvalueCast
오류를 보고하지 않습니다.
int main() {
int a = 1;
int *p = &a; // Okay, take address of lvalue
// Identity cast creates rvalue from lvalue;
p = &(int)a; // problem: should cause C2102: '&' requires l-value
}
Visual C++의 규칙과 관련된 문제에 대한 자세한 내용은 Nonstandard Behavior을 참조하세요.
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면
프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.
구성 속성>C/C++>Language 속성 페이지를 선택합니다.
형식 변환 규칙 적용 속성을
/Zc:rvalueCast
설정하거나/Zc:rvalueCast-
.로 설정합니다. 확인을 선택하거나 적용하여 변경 내용을 저장합니다.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기