c++ 类的数据成员不能使用 auto、extern和register等进行修饰

在书上看见这样的话。
"类的数据成员中不能使用 auto、extern和register等进行修饰"
我以为是auto、extern、register和static(因为还有个“等”字)
但是在之后网上发现有用static的情况。

1那么这句话所表示 不能使用的修饰词 是哪些。(除了我举例的4个)?
2另外静态函数成员 只能对静态变量成员的调用?
3使用static成员,有什么需要注意的吗?
const 也是 同一类型的修饰词吗。

怎么说……没有实验,你可以自己实验一下,不过应该auto,extern和register都是不能用在类成员变量上的。
原因很简单,
auto表示自动推断类型,然而作为类的成员,其声明并不会赋值,所以无法去推断其类型
extern表示外部定义,这不太可能(实际上我觉得是不可能)发生在类的声明中,否则它不会作为类的成员来声明(因为extern表示它是外部的,那么外部的怎么会是这个类的成员呢?)
register表示尽可能让这个变量保存在寄存器中,这是不可能的,寄存器是有限的,类的成员可能有很多,类又要储存在内存中,不可能让其某个成员单独存在寄存器中,更不必说多个成员储存在其中了。而且register关键字用到的时候很少了,因为编译器有自主选择忽略这个关键字的权利。而且通常这并不会带来多么大的速度提升,还可能导致效率反而低下。
static表示静态成员,即不依赖于任何一个类的实例而存在,储存在内存中的静态变量区,因此可以不借助类的实例来调用,所有的类也共享着同一块内存。
静态函数也是如此,所以静态函数只能操作类的静态变量(因为它的定义不依赖某个具体的实例,也就不具备直接操作某个具体实例的能力)。
const表示常量,可以对类的成员使用,对数据成员使用表示该数据成员一旦初始化不能被修改。对类的成员函数使用,表示该函数对类的成员只读(也就是不改变类的数据)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-17
thread_local?
相似回答