Ist der gültige C ++ Code nach Norm?
-
10-10-2019 - |
Frage
Ich habe diesen Beispielcode:
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();
}
Im Grunde bin ich über den Konstruktor Test
besorgt, wo ich eine konstante Referenz auf eine temporäre Variable bin zu speichern und in methof f
verwenden. Wird der temporäre Objektverweis bleibt gültig innerhalb f
?
Lösung
Es wird nicht gültig sein. Das temporäre Objekt wird nach der Initialisierung a
zerstört werden. Zu der Zeit, rufen Sie rufen Sie auf undefiniertes Verhalten f
von test
aufrufen. Nur folgendes gilt:
// Valid - both temporary objects are alive until after the
// full expression has been evaluated.
Test<>().f();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow