我在以下代码中面临编译错误。我期望即使是临时对象也可以绑定到 const 引用。所以我想知道它应该是有效的代码。但是,g++ 给了我这个错误,而 clang 不会给我这样的错误。有没有人让我知道发生这种情况的确切原因?
#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;
};