c++ - C 与 C++ 中的 const 正确性

标签 c++ c constants

我了解 const 正确性的含义,我的问题不是关于 const 正确性是什么。所以我不期待对此的解释或 C++-FAQ 链接。

我的问题是:

  • C中的const和C++中的const在语义上有什么区别?
  • 造成差异的原因是什么?

如果能引用各自标准中的引述来明确差异,那就太好了。

我经常在 C 和 C++ 之间切换,我想知道在此过程中应该牢记的要点。

我似乎不记得这些的原因(如果你能提供一个推理,特别感谢),但从我的脑海中,我记得:

  • C++ 中的 const 变量默认有内部链接,而 C 中它们有默认的外部链接;
  • const 对象在 C++ 中可以用作编译时值,但在 C 中不能用作编译时值;
  • 指向字符串文字的指针在 C++ 中必须是 char const*,但在 C 中可以是 char*

我错过了什么?

最佳答案

除了您引用的差异之外,还有图书馆的差异 史蒂夫·杰索普提到,

char* p1;
char const* const* p2 = &p1;

在 C++ 中是合法的,但在 C 中不合法。从历史上看,这是因为 C 最初允许:

char* p1;
char const** p2 = &p1;

在标准被采用前不久,有人意识到这 在 const 安全性中打了一个洞(因为现在可以为 *p2 分配一个 char const*,这导致 p1 被分配一个 char const*);和 没有实时深入分析问题,C委员会禁止任何 除了顶级 const 之外的其他 const。 (即 &p1 可以是 分配给 char **char **const,但不分配给 char const** 也不是 char const* const*。)C++ 委员会做了进一步的 分析,意识到问题只存在于 const 级别后跟一个非const级别,并计算出必要的 措辞。 (参见标准中的 §4.4/4。)

关于c++ - C 与 C++ 中的 const 正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8908071/

相关文章:

c - 按位与的结果似乎为 0,但实际上不是

c++ - 将 const 放在函数声明之后是什么意思?

dart - 在Dart中检测何时将const对象传递给对其进行突变的函数

php - 如何在 PHP 中解析常量

c++ - 当我的 C++ 控制台程序被未知进程关闭时如何删除?

c++ - 返回一堆值的接口(interface)

c++ - 如何只读取 ifstream 中的字符并忽略 C++ 中的数字?

c - 定义一个 C 函数,该函数采用带有维度大小变量的二维数组

c - 用按位运算符替换 “!=”

c++ - 使用 opencv 访问沿曲线/路径的像素