从this thread很明显,字符串文字不能用于返回常量字符串&的函数,因为存在从const char *到std :: string的隐式转换,从而创建临时。返回引用临时(内置类型)
既然这样,为什么我得到一个警告“警告:返回引用到一个临时”如果我的返回类型完全匹配,也没有必要转换,如:
include <iostream>
const int& test(){
return 2;
}
int main(){
std::cout << test();
}
发生不需要的隐式转换关于2的返回值,为什么会有警告?我认为使用测试()将几乎是相同的做
const int& example = 2;
这是完全有效的。此外,如果我将2更改为2.2(因此它是双精度型),程序仍然运行(具有相同的警告),尽管事实上存在从double到int的转换?如果有从double到int的转换,我不应该遇到类似于const char *返回到字符串引用的问题吗?
引用不能直接绑定到右值。相反,构造一个类型为“int”的临时对象(在'test'内部)并初始化为2,并返回对该对象的引用。暂时在此刻被摧毁,导致参考悬而未决。 –
@Igor Tandetnik我明白了,谢谢。对我而言,我链接的线程使得它看起来像是只有在发生隐式转换时才会遇到的问题。 – Silversonic
和它“有效”的“事实”,好吧,那只是UB。 –