"The distinction between top-level and low level matters when we copy an object. When we copy an object, top-level consts are ignored.
Copying an object doesn't change the copied object. As a result, it is immaterial whether the object copied from or copied into is const."
主要是最后的 the object copied into is const 无法理解,比如A值复制给B,B如果是const类型,怎么进行赋值(原文说 immaterial,无关紧要?)
不知是不是我理解错了,因为我看勘误表也没有提到。(如果V友购买了中文版,能发一封2.4.3截图到[email protected],那是极好的了,感谢)
附上截图:
http://rghost.net/60366501/image.png
最后感谢大家解答。
1
tsui 2015-01-16 00:12:13 +08:00
|
2
acros 2015-01-16 00:28:08 +08:00
这个const用法在英文术语里面是叫“top-level”"low-level"?
就是修饰对象的区别,一个const修饰指针(top-level),一个修饰指针指向的对象(low-level)。 如果是low-level,指针本身在复制时当然是const无关的。 这本是第五版吧,翻了下第四版没这个内容····· |
3
acros 2015-01-16 00:36:51 +08:00
噗,说错了。
仔细看了下文章,最后一句的意思是: 复制时不会被赋值对象的值,有无const当然是没影响的···· |
6
acros 2015-01-16 00:42:07 +08:00
x,打字老打反,“复制”和“赋值”搅浑了···请无视上面。
1.书上最后一句意思: copy时不会改变被copy对象的值,有无const当然是没影响的···· 2.针对你说的: “主要是最后的 the object copied into is const 无法理解,比如A值复制给B,B如果是const类型,怎么进行赋值(原文说 immaterial,无关紧要?)” 一个const对象是初始化以后不再能被改变,初始化赋值是允许的(类内const变量也是,可以在初始化列表中指定)。 而且非const类型可以隐式转化成const类型,反过来就要用到C++的类型转换方法了,书后面也会讲···· |
7
fetich OP @acros
被复制的对象 值不会改变,有无const没有关系,但被赋值的对象 如果是const类型,他的值初始化后不能被改变的啊。 |
9
acros 2015-01-16 00:49:46 +08:00
@fetich 对的。
const是给编译器检查用的,“=”符号含义就是拷贝一份对象出来,不会涉及到改变对象的值,检查被拷贝对象的const属性是多余的···· |
10
canautumn 2015-01-16 01:01:57 +08:00 1
其实这句话是这样解读的,Copying an object doesn't change the copied object. As a result, it is immaterial whether the object copied from or copied into is const.
这里边的object 指的是正在复制的对象,比如以下两个例子,调换2、3行的const都正确。 const int c2 = 42; const int c3 = c2; int c4 = c3; 这里边的object指的是c3. (指最后一行的复制) const int ci = 42; const int * const p1 = &ci; const int * p2 = p1; 这里边的object指的是p1。(指最后一行的复制) 以上两个例子都是toplevel const 复制到toplevel non-const的例子,都正确,因为toplevel被忽略,可以从const复制到non-const,反过来当然也可以。 直接翻译这句话:“复制一个对象并不能改变被复制的对象的值,所以,被复制的对象和复制到的对象是不是const无关紧要。” 对应以上的例子1: 复制c3 不会改变c3的值,所以c3和c4 各自是不是const无所谓。对应例子2:复制p1不会改变p1的值,所以p1和p2 各自是不是(注意)”Toplevel“ const 无所谓。 这段话整个在讲的是toplevel const,这段儿还没讲到low-level的事儿,下段才是。 这句话确实有点晦涩。不过你要清楚指针在这本书里也叫做object就知道了。 |
11
acros 2015-01-16 01:39:01 +08:00 1
我发现我要被打脸了,怎么感觉说错了作者要表达的意思。
top level是C++11里面新出来的术语吧····· 看这篇的“顶级 const”: http://www.ilanever.com/article/sitedetail.html?id=221#article-navi-7 看上面那篇C++11的解析吧,不要看我的了。 |