这是有效的 C++ 吗?代码是否符合标准?
我有这个示例代码:
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
的构造函数,其中我存储对临时变量的 const 引用并在 methodf f
中使用它。临时对象引用在 f
内仍然有效吗?
I have this sample code:
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();
}
Basically I am worried about the constructor of Test
where I am storing a const reference to a temporary variable and using it in methof f
. Will the temporary object reference remains valid inside f
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它不会保持有效。初始化
a
后,临时对象将被销毁。当您调用f
时,您通过调用test
来调用未定义的行为。仅以下内容有效:It won't remain valid. The temporary object will be destroyed after initializing
a
. At the time you callf
you invoke undefined behavior by callingtest
. Only the following is valid: