注册 登录
编程论坛 C++教室

C++ primer 关于引用的初始化用了形参 不理解 求指教

饭桶 发布于 2012-03-29 22:18, 705 次点击
C++ primer 的第455页,有这么一段实在理解不了
程序代码:

class ConstRef{
public:
    ConstRef(int ii);
private:
    int i;
    const int ci;
    int &ri;
};
ConstRef::ConstRef(int ii): i(ii),ci(i),ri(ii){}

ri是对int的引用,但在初始化列表中ri(ii),ii只是一个形参,是临时的数据,实在不理解,求指教!
7 回复
#2
榴紫丫2012-03-29 23:46
    int i;
    const int ci;
    int &ri;
可以初始化const对象或慢用类型的对象,但不能对他们进行赋值,在执行构造函数前要完成初始化.
初始化const或引用类型数据成员的唯一机会是在构造函数初始化列表中


//构造函数初始化列表仅指定用于初始化成员的值,并不指定这些初始化执行的次序.成员被初始化的次序就是定义成员的次序.//
#3
rjsp2012-03-30 08:16
楼主说得对,引用一个局部临时对象是错误的行为
#4
lz10919149992012-03-30 09:10
ConstRef::ConstRef(int ii): i(ii),ci(i),ri(i){}
这就对了,是不是作者代码写错了呢?
#5
pangding2012-03-30 23:45
书的上下文还有什么其它的相关解释吗?

我也怀疑是作者笔误了,也许可能应该定义成这样:ConstRef(int &ii);
不过他也可能是为了阐明什么其它的问题。
#6
飞扬_余2012-03-31 08:03
按照原书,编译成功呀,应该是可以的吧。……不知道为什么
#7
BianChengNan2012-03-31 08:31
编译肯定可以通过,只不过结果估计会有问题的,这个最好自己写个程序验证一下,多谢楼主的帖子,之前还真没在意
#8
饭桶2012-04-01 07:54
谢谢各位了,先把这个问题搁一下!
1