c++ - 什么是顶级 const 限定符?

标签 c++ constants

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/

相关文章:

C++ 接口(interface)错误;标识符 "class"未定义

c++ - std::list 与 std::vector 迭代

php - PHP 和 C++ 之间的安全套接字通信

c++ - 具体来说,标准在哪里规定修改 const 对象是未定义的行为?

c++ - 插入 std::map 时的常量问题

c++ - 为什么这个c++代码不会出现const的错误

c++ - 非 const 函数 _fastcall TStrings::GetCount() 为 const 对象调用

C++ 用户输入验证无法正常工作

指针返回问题的 c++ 协方差问题

c++ - 具有 const 成员的结构 vector ?