Answers:
可以问另一个问题(或者只是看原始问题的另一种方式):
const
所有成员成为成员const
?如果我有:
struct whatever { int data; };
const whatever test;
test.data const
也会吗?
我的回答是:可以。如果声明类型的对象whatever
与const
它所有的成员将const
太
同样,如果你声明类型的对象whatever
有volatile
那么它的所有成员将volatile
过,就像如果你声明与对象const
,所有它的成员将是const
太多。
const
并且volatile
是同一枚硬币的两个面;因此,标准经常将它们称为cv-qualifiers
。
从标准报价($ 7.1.5.1 / 8)
[注:volatile是实现的一种暗示,可以避免涉及对象的积极优化, 因为对象的值可能通过实现无法检测到的方式进行更改。有关详细的语义,请参见1.9。通常,volatile的语义在C ++中与在C中相同。
这意味着,如果您的对象是结构的实例,则编译器无法避免涉及该对象的积极优化,除非它避免对其每个成员的积极优化。(否则,它又如何避免涉及对象的优化?)
相关主题:
来自:http : //msdn.microsoft.com/zh-cn/library/145yc477%28v=vs.80%29.aspx
要将指针指向的对象声明为const或volatile,请使用以下形式的声明:
const char *cpch;
volatile char *vpch;
要将指针的值(即指针中存储的实际地址)声明为const或volatile,请使用以下形式的声明:
char * const pchc;
char * volatile pchv;
volatile
成员函数只会使this
指针易变,因此每次访问成员时都会从内存中读取成员,但不会“正式”地改变成员。