Я проверяю код колледжа и вижу, что у него есть несколько констант, определенных в глобальной области видимости как:
const string& SomeConstant = "This is some constant text";
Лично для меня это плохо пахнет, поскольку ссылка ссылается на то, что я предполагаю, является "анонимным" объектом, созданным из данного массива символов.
Синтаксически, это законно (по крайней мере, в VC ++ 7), и кажется, что оно работает, но на самом деле я бы предпочел, чтобы он удалил &, поэтому нет никакой двусмысленности относительно того, что он делает.
Итак, действительно ли это TRULY безопасно и законно, и я одержим? Имеет ли созданный временный объект гарантированный срок службы? Я всегда предполагал, что анонимные объекты, используемые таким образом, были разрушены после использования ...
Так что мой вопрос можно также обобщить на время жизни анонимного объекта. Стандарт диктует время жизни анонимного объекта? Будет ли он иметь то же время жизни, что и любой другой объект в той же области? Или это только дано время жизни выражения?
Кроме того, когда вы делаете это как локальный, он явно имеет другую область действия:
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 (Внешнее);
Уничтожение А (Внешнего);
Привет