用整数值初始化非常量参考
Initializing non const reference with integer value
请考虑此代码:
#include <iostream>
using namespace std;
class test
{
int& ref;
public:
test(int i):ref(i)
{
cout << "Constructor Called" << endl;
}
void p(){ cout<< ref << "n";}
};
int main()
{
test obj(5);
obj.p();
return 0;
}
输出:
Constructor Called
5
怀疑:在此处使用整数值(5(初始化的非const参考(参考(,而以下代码失败:
int& r = 5;
test's
构造函数:
test(int i)
将int
作为参数按值。
当您通过将5
传递给其构造函数的obj
对象时,即:
test obj(5);
该构造函数的参数i
设置为5
(即:5
复制到i
中(,然后在构造函数成员初始化列表中使用此参数初始化此参数(而不是构造函数上使用的字面5
(,则成员参考ref
初始化。/p>
test(int i):ref(i)
您有 danging Reference :参考 ref
超出了引用对象(i
(,因为构造函数的参数i
不再存在构造函数后不再存在。
未直接使用5初始化参考,它是用局部i
初始化的。由于i
在构造函数的退出时被销毁,因此您将留下一个悬空的参考,这是引用已超出范围的对象的参考。诸如Clang之类的编译器会告诉您有关此事的信息,并发出警告,可能是:
警告:绑定参考成员'ref'堆栈分配参数'i'[ -wdangling-field ]
相关文章:
- 为什么make_nvp需要非常量参考?
- 什么是常量参考参数以及如何使用它?
- 常量参考的正确语法
- 为什么双转换到看似任何原始的常量参考
- 为什么未调用具有常量参考返回值的超载方法
- 用整数值初始化非常量参考
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- 常量参考延长对象的寿命,然后是const_cast,这是一个好主意吗?
- 具有常量参考的可变参数模板专用化
- C 中的参考和常量混淆
- 完美的转发常量参考扣除错误
- 将计算结果保存到常量参考中
- 我如何安全地坚持使用C 常量参考
- 获取迭代器以供常量参考
- 通过常量参考临时延长寿命
- 与非常量参考参数交换
- c++棘手的常量参考考试任务
- 常量参考不"updated"
- 范围为循环常量参考似乎没有区别
- 常量参考和左值