Это действительный код C ++ в соответствии со стандартом?
-
10-10-2019 - |
Вопрос
У меня есть этот пример кода:
struct A
{
bool test() const
{
return false;
}
};
template <typename T = A>
class Test
{
public:
Test(const T& t = T()) : t_(t){}
void f()
{
if(t_.test())
{
//Do something
}
}
private:
const T& t_;
};
int main()
{
Test<> a;
a.f();
}
В основном я беспокоюсь о конструкторе Test
где я храню ссылку на константу на временную переменную и использую ее в Methof f
. Анкет Останется ли ссылка на временный объект действительным внутри f
?
Решение
Это не останется действительным. Временный объект будет уничтожен после инициализации a
. Анкет В то время, когда вы звоните f
Вы вызываете неопределенное поведение, позвонив test
. Анкет Только следующее действительное:
// Valid - both temporary objects are alive until after the
// full expression has been evaluated.
Test<>().f();
Не связан с StackOverflow