Je possède ce code exemple:Est-ce un code C++ valide selon la norme?
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();
}
Fondamentalement, je suis inquiet au sujet du constructeur de Test
où je stocke une référence const à une variable temporaire et l'utiliser dans methof f
. La référence d'objet temporaire reste-t-elle valide à l'intérieur de f
?
Je pense - NON. Le compilateur ne peut pas suivre (dans le cas général) l'emplacement de la référence et s'il est stocké de manière persistante. Mais le plus simple est d'écrire un exemple d'application et de voir ce qui se passe. – valdo
Cela fonctionne sur VS2008, mais je ne suis pas trop convaincu de son droit. – Naveen