/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 개발 환경에서 이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 Visual Studio에서 C++ 컴파일러 및 빌드 속성 설정을 참조하세요.

  2. 구성 속성>C/C++>Language 속성 페이지를 선택합니다.

  3. 형식 변환 규칙 적용 속성을 /Zc:rvalueCast 설정하거나 /Zc:rvalueCast-.로 설정합니다. 확인을 선택하거나 적용하여 변경 내용을 저장합니다.

참고 항목

/Zc(규칙)