다음 코드의 컴파일 오류가 발생합니다. 나는 심지어 임시 객체가 const 참조에 바인딩 될 것을 기대하고있다. 그래서 그것이 유효한 코드가되어야 궁금하네요. 그러나 g ++은 나에게이 에러를 준다. clang은 그런 에러를주지 않을 것이다. 아무도 이것이 왜 일어나는 정확한 이유를 알려주지 않습니까?g ++ : 임시 객체 인 경우 컴파일이 참조 배열을 추론하지 못했습니다.
#include <iostream>
struct TestClass
{
TestClass() : str()
{
strncpy(str, "hello", sizeof(str));
}
char str[6];
char (&getStr())[6]
{
return str;
}
};
template <typename T>
void printFunc(const T& str)
{
std::cout << str << std::endl;
}
int main()
{
TestClass obj;
printFunc(obj.str);
// printFunc(TestClass().str); // <- This line gives compilation error.
printFunc(TestClass().getStr());
return 0;
};
나중에 참조 할 수 있도록 게시물에 코드를 넣으려면 html 태그를 사용하지 말고 그냥 모두 선택하고 '{}'버튼을 누르십시오. 또는'{}} 버튼이하는 것과 같은 4 칸 (보통 코드 들여 쓰기)으로 들여 쓰기하십시오. –
g ++ 4.7.1은 오류를주지 않습니다. 그러나 구형 g ++에서는 오류가 발생합니다. http://ideone.com/263aT – nims
정말입니까? 나는 g ++를 사용했고 어떤 에러도 내지 않았다. – Gabi