복사 기본 생성자가 아닌 기본 형식 변수에서 복사 생성자를 복사하고 rvalue 참조 함수 인수를 전달할 수 있습니다.rvalue 참조 함수 인수를 통해 전달할 때 기본 유형 변수에서 복사하는 방법
그러나 원시 타입 변수로 어떻게 할 수 있습니까? 예를 들어
: 비주얼 스튜디오 2013 년
#include <cassert>
#include <iostream>
struct MyClass
{
int m = 0;
};
MyClass& f(MyClass& x)
{
x.m++;
return x;
}
inline MyClass f(MyClass&& x)
{
return f(x);
}
int& f(int& x)
{
x++;
return x;
}
inline int f(int&& x)
{
return f(x);
}
int main()
{
MyClass x1;
auto y1 = f(MyClass(x1)); // Calls f(MyClass&&)
// Result: x1.m = 0, y1.m = 1
int x2 = 0;
auto y2 = f(int(x2)); // Calls f(int&)
// Result: x2 = 1, y2 = 1
std::cout << x1.m << x2; // Result in VS2013: '01' But '00' in gcc and clang!
assert(x1.m == x2); // FAILED in VS2013!!!
return 0;
}
결과는 선언이 실패한와 '01'입니다.
http://rextester.com/CAPY87169
VS2013이 없지만 이렇게하면 어떻게됩니까? y2 = f (int x3 = x2); ? –
@IanThompson 오류 C2144 : 구문 오류 : 'int'앞에 ')'가 표시됩니다. –