为什么在CTOR工作中将温度变量传递到const Ref中
why passing in a temp variable into const ref in ctor work?
// Example program
#include <iostream>
#include <string>
struct foo
{
int d_member;
foo(const int & in):
d_member(in){};
};
int main()
{
foo *p;
{
int temp = 5;
p = new foo(temp);
}
std::cout << p->d_member << std::endl;
return 0;
}
foo将const ref与int的ctor进行,我通过了一个临时的int。新临时被摧毁。为什么我仍然能够打印出D_Member?
您的构造函数初始化列表 copies 成员变量的整数参数。您的会员变量的寿命是您对象的寿命。
正如其他已提到的非参考成员变量所述的其他构造函数调用简单从 const
参考参数复制值(如果您通过参考或值传递,甚至无关紧要(。
如果您的成员变量是参考
,您的情况会有所不同struct foo
{
const int& d_member; // <<<< reference member variable
foo(const int & in): d_member(in){};
};
在这种情况下,访问范围块后访问 d_member
会增加不确定的行为:
{
int temp = 5;
p = new foo(temp);
}
std::cout << p->d_member << std::endl; // <<<< Undefined behavior
是的, temp
被破坏,但在此之前,在d_member(in)
初始化过程中已复制。所以这里没有任何错误
相关文章:
- 将 ArrayXd 传递给 const VectorXd& 和 const Ref<const VectorXd>&
- 使用 const char* 初始化 const ref 字符串成员时幕后会发生什么
- const-ref传递的模板化参数是否经过优化,以便在足够小时按值传递
- 正在通过const-ref未定义的行为捕获新构造的对象
- 将文字作为const-ref参数传递
- "move"和"const ref&"如何使双丁吉过载起作用?
- 编译器在 const ref 类型参数上使用临时对象时是否应该警告不安全的行为?
- 为什么在CTOR工作中将温度变量传递到const Ref中
- 使用 const ref 参数进行自赋值的行为
- 是否不允许编译器假设 const-ref 参数将保持 const?
- 如何在不允许临时创建的情况下编写 const ref
- 使用const_cast const-ref getter 实现引用获取器的陷阱
- 重载分辨率:调整 const/ref 是否不比用户定义的转换更好?
- const Ref与RVALUE内部资源结合
- 使用std :: async时,为什么通过const ref速度较慢
- 为什么转换运算符在存在 const-ref 和值时会导致不明确的重载
- 如何避免将const-ref返回缓存中的临时性
- dynamic_cast const ref 到 const ref. cppReference.com 的解释似乎很奇怪
- 为什么"const Eigen::Matrix<>&"和"const Ref<Eigen::Matrix<> >"显然不兼容?
- 为什么我的const-ref无效