2010-06-26 2 views
6

다음 코드는 유효합니까?rvalue 레퍼런스는 암시 적 변환을 허용합니까?

std::string&& x = "hello world"; 

g ++ 4.5.0은이 코드를 아무 문제없이 컴파일합니다.

+0

이것에 대한 흥미로운 사용 사례가 있습니까? 명명 된 rvalues의 유일한 이유는 특수 과부하에 대한 바인딩 때문이라고 생각했습니다. – Inverse

+0

@Inverse : 글쎄, 그게 바로 내가 왜 함수에 인수를 전달 하는지를 묻는 이유이다. 질문을하기 위해 함수를 작성하고 호출하고 싶지는 않습니다. 기술적으로 이름이 지정된 rvalue와 같은 것은 없습니다 (키워드'this'와'nullptr' 제외). 당신은 아마도 명명 된 rvalue * reference *를 의미 할 것입니다 -이 예제에서'x'는 rvalue가 아닌 lvalue입니다. – fredoverflow

답변

5

이것은 현재 유즈넷에서 논의됩니다. Rvalue reference example in 8.5/3 correct or wrong?을 참조하십시오.

그것은 합법적이지 않습니다.

+0

@Jerry는 "참조가 rvalue 참조이고 이니셜 라이저 표현식은 rvalue가되어야합니다"라는 하위 범람이며 문자열 리터럴이 만족하지 않습니다. –

+0

@Jerry 문자열 리터럴은 C와 마찬가지로 lvalues입니다. 5.1.1/1을 참조하십시오. 일반 int와는 달리, 이들은 객체를 참조하고 포인터로 변환해야합니다. 따라서, 그들은 실제로 "저장 위치 지정자 값"(객체를 참조하는 lvalues)이되는 속성을 갖습니다. –

+0

@Johannes : 예 - 나는 5.1.1/1을 찾지 못했습니다. 분명히 그렇게 말하고 있습니다. 감사. 그것은 분명히 해석을 불가능하게 만든다. –

관련 문제