Ich habe diesen Beispielcode:Ist dieser gültige C++ - Code standardgemäß?
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();
}
Grundsätzlich Ich mache mir Sorgen um den Konstruktor Test
, wo ich eine konstante Referenz auf eine temporäre Variable bin zu speichern und in methof f
verwenden. Bleibt der Verweis auf das temporäre Objekt innerhalb von f
gültig?
Ich denke - NEIN. Der Compiler kann (im allgemeinen Fall) nicht verfolgen, wohin die Referenz geht und ob sie persistent gespeichert wird. Aber am einfachsten ist es, eine Beispiel-App zu schreiben und zu sehen, was passiert. – valdo
Es funktioniert auf VS2008, aber ich bin nicht davon überzeugt, dass es richtig ist. – Naveen