我有这样的功能
const string &SomeClass::Foo(int Value)
{
if (Value < 0 or Value > 10)
return "";
else
return SomeClass::StaticMember[i];
}
Run Code Online (Sandbox Code Playgroud)
我得到warning: returning reference to temporary
.这是为什么?我认为函数返回的两个值(引用const char*""和对静态成员的引用)不能是临时的.
Chr*_*ian 48
这是一个不需要的隐式转换发生的例子.""
不是std::string
,所以编译器试图找到一种方法将其转换为一个.通过使用string( const char* str )
构造函数,它成功完成了该尝试.现在std::string
创建了一个临时实例,它将在方法调用结束时删除.因此,在方法调用之后引用一个不再存在的实例显然不是一个好主意.
我建议您将返回类型更改为const string
或存储""
在成员或静态变量中SomeClass
.
这是尝试在c ++中优化代码的示例.我做到了,每个人都做到了......值得一提的是,这是有资格返回价值优化的经典例子.
像ttvd一样,正确的答案是返回const std :: string而不是对它的引用,并让编译器优化它.
如果您相信您喜欢的语言的翻译能够在您身后进行优化,那么您也不应该尝试使用C++过于聪明.