10

我找到了用户R..的评论

C 和 C++ 不是同一种语言。特别是,Cconst与 C++ 无关const

const我知道, C 中的限定符和 C++ 中的限定符之间的一个区别const是它的默认链接。

在 C++ 中使用限定符在命名空间范围内声明的对象const具有内部链接,而在 C 中,const在全局范围内声明具有限定符的对象(static之前没有限定符const)具有外部链接。

但是它们在 C 和 C++ 语言之间还有什么不同呢?我认为两者在两种语言中都有相同的概念和目的。

我的问题:

  • C 中的 const 限定符和 C++ 中的 const 限定符有什么区别?

C 和 C++ 中的“ const ”有何不同?不要在限定符的上下文中指出 C 和 C++ 语言之间的确切区别。const只有你不能或可以用某种语言做的事情。

4

2 回答 2

12
  • 最重要的区别在于,在 C++ 中,const变量是常量表达式(甚至在引入 C++11 之前constexpr),但constC 中的变量不是。

    这意味着 C++ 允许你做类似的事情,const size_t n = 1; static int array[n];但 C 不允许这样做,据说是出于历史原因。

  • 在 C++const中,参与确定链接。这在 C++ 版本之间是不同的。根据cppreference.com(强调我的):

    在命名空间范围内声明的以下任何名称都具有内部链接:


    • non-volatile 非模板 (C++14 起) 非内联 (C++17 起) 非导出 (C++20 起)未声明为 extern 且 are' 的const 限定变量(包括 constexpr) t 先前声明具有外部链接;

    而在 C 中,const根本不参与确定链接 - 只有声明范围和存储类说明符很重要。

  • 在 C++ 中,您可以const限定成员函数。这在 C 中是不可能的,因为它不支持成员函数的语法。

  • C 允许const在没有初始化程序的情况下声明 -qualified 变量。在 C 中,我们可以在没有初始化程序的情况下编写const int x;,但 C++ 不允许这样做。乍一看,这似乎是 C 语言中的一个毫无意义的错误,但其基本原理是计算机具有只读硬件寄存器,其值由硬件而非软件设置。这意味着 C 仍然适用于与硬件相关的编程。

于 2020-02-07T10:45:41.353 回答
0

来自cppreference.com

const未声明的非局部非易失性非模板 (C++14 起) 非内联 (C++17 起) 变量的声明中使用的限定符extern赋予它内部链接。这与const文件范围变量具有外部链接的 C 不同。

除此之外,const在 C 和 C++ 中具有相同的语义,并且 C 头文件const通常被编译为带有条件的 C++ 头文件"extern C"

于 2020-02-07T10:17:15.897 回答