const
at "top level"qualifier 在 C++ 中是什么意思?
还有什么其他级别?
例如:
int const *i;
int *const i;
int const *const i;
最佳答案
顶级 const 限定符会影响对象本身。其他只是 与指针和引用相关。他们不做对象 const,并且仅防止使用指针或通过路径修改 引用。因此:
char x;
char const* p = &x;
这不是顶级常量,并且没有一个对象是不可变的。
表达式 *p
不能用于修改 x
,但其他表达式
可; x
不是常量。就此而言
*const_cast<char*>( p ) = 't'
合法且定义明确。
但是
char const x = 't';
char const* p = &x;
这一次,x
上有一个顶级的 const,所以 x
是不可变的。不
允许更改它的表达式(即使使用了 const_cast
)。这
编译器可能会将 x
放在只读内存中,并且它可能会假设
x
的值永远不会改变,无论其他代码可能做什么。
要给指针顶层const
,你可以这样写:
char x = 't';
char *const p = &x;
在这种情况下,p
将永远指向x
;任何改变这一点的尝试
是未定义的行为(编译器可能会将 p
放在只读内存中,
或假设 *p
引用 x
,而不管其他任何代码)。
关于c++ - 什么是顶级 const 限定符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7914444/