2014-01-25 2 views

답변

6

const가 아닌 lvalue 참조를 사용하기 때문에 사용자의 예제에서는 올바르지 않습니다. 임시 문자열은 문자열 리터럴에서 빌드되며 임시 변수는 const 왼쪽 값 참조 또는 오른쪽 값 참조에만 바인딩 할 수 있습니다.

이 작동 것이다 :

void func(const std::string&); 
void func(std::string&&); 

: 어떤 컴파일러 (주목할만한 VS를) 코드를 받아 들일 그들이 "확장자"로 임시 변수에 const가 아닌 lvalue를 참조를 결합 할 수 있기 때문이다. 하지만 이것은 표준 C++가 아니기 때문에 이식성있는 코드를 작성하려는 경우에는 사용하지 않는 것이 좋습니다. 또한 의미를 사용하면 공급 업체와 의미를 파악해야합니다.

+0

그러나 vc2008은 허용합니다. 왜? – Ivars

+2

@ 악명 높은 컴파일러 "확장명"을 찾습니다. – juanchopanza

+0

은'void func (const std :: string &)'표준입니까? – Ivars