我正在查看一位同事的代码,我看到他在全局范围内定义了几个常量:
const string& SomeConstant = "This is some constant text";
就我个人而言,这对我来说很糟糕,因为该引用指的是我假设是从给定 char 数组构造的“匿名”对象。
从语法上讲,它是合法的(至少在 VC++ 7 中),而且它似乎可以运行,但实际上我宁愿让他删除 & 所以它在做什么没有歧义。
那么,这真的安全合法吗?我很着迷?正在构造的临时对象是否有保证的生命周期?我一直认为以这种方式使用的匿名对象在使用后会被破坏......
所以我的问题也可以推广到匿名对象的生命周期。标准是否规定了匿名对象的生命周期?它会与同一范围内的任何其他对象具有相同的生命周期吗?还是只给出表达式的生命周期?
此外,当作为本地人执行此操作时,它的范围显然不同:
class A
{
string _str;
public:
A(const string& str) :
_str(str)
{
cout << "Constructing A(" << _str << ")" << endl;
}
~A()
{
cout << "Destructing A(" << _str << ")" << endl;
}
};
void TestFun()
{
A("Outer");
cout << "Hi" << endl;
}
显示:
构造A(外部);破坏A(外);你好