임시 바인딩 내가 당신은 내가 세()이 변이 방법을 전달하고 볼 수있는 다음 코드를좌변 참조
string three()
{
return "three";
}
void mutate(string& ref)
{
}
int main()
{
mutate(three());
return 0;
}
있습니다. 이 코드는 잘 컴파일됩니다. 내 이해, temporaries 비 const 참조에 할당 할 수 없습니다. 그렇다면이 프로그램이 어떻게 컴파일되고 있습니까?
의견이 있으십니까?
편집 :
컴파일러는 시도 :
foo.cpp: In function ‘int main()’:
foo.cpp:16: error: invalid initialization of non-const reference of type ‘std::string&’ from a temporary of type ‘std::string’
foo.cpp:10: error: in passing argument 1 of ‘void mutate(std::string&)’
(줄 번호는 : 그것은 ++ 4 적어도 g하지 컴파일, 를 않습니다
GCC는 C++ 표준에 가깝습니다. – Learner
불행히도 GCC가 없습니다. –
@Appu : Comeau (http://www.comeaucomputing.com/tryitout/)는 누락 포함 및'std' 접두사에 대한 코드를 수정 한 후 다음과 같이 말합니다. '비 const에 대한 참조의 초기 값은 반드시 lvalue 여야합니다.' VC가 이것을 허용하는 이유는 VC가 손상 되었기 때문입니다. (그들은 그것을 "기능"이라고 부르지 만 사실은 버그입니다.) – sbi