我只是建立我们的工作项目之一,我看到的是增加了一个新功能:警告C4172:返回一个绑定到局部变量的const std :: string引用。它有多安全?
const std::string& ClassName::MethodName() const
{
return "";
}
,编译器会发出警告:
警告C4172:局部变量或临时的返回地址
我认为编译器是正确的。 这个功能有多安全?
请注意,函数不会返回const char*
,因为字符串文字具有静态存储持续时间,所以这样做可以。它返回一个参考const std::string
我正在考虑延长临时绑定到const引用的生命周期...我的意思是,也许它***是安全的?在与开发人员交谈之前,我想确保添加了功能 –
@Armen Tsirunyan,在您调用任何函数之前它是安全的。即使你不调用函数,也不能使用它,因为所有可以使用它的函数都是函数。即使你找不到任何函数来使用它,编译器可能会重新排列你的代码并在中间放置一个函数。所以它在任何方面都不安全 – Dani
@Als:我不能说我对答案满意。如果一个本地临时***的生命周期不能超出其范围(我不知道是否是这种情况),那么你是对的,**但**在这种情况下绑定返回值该函数的const引用也无济于事。如果它可以在函数外部扩展,那么它是绑定它还是复制它是无关紧要的... –