c++ - C语言中的const限定词和C++语言中的const限定词有什么区别?

标签 c++ c constants language-comparisons language-concepts

我找到了用户commentR..:

C and C++ are not the same language. In particular, C const has nothing to do with C++ const.



我知道,C语言中的const限定符和C++语言中的const限定符之间的区别是其默认链接。

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

但是在C和C++语言之间,它们又有何不同?我以为两种语言在概念和目的上都具有相同的含义。

我的问题:
  • C中的const限定词和C++中的const限定词有什么区别?


  • How does "const" differ in C and C++?的答案并未在const限定词的上下文中指出是C语言和C++语言之间的确切区别。只有您不能做的事情或可以用某种语言来做的事情。

    最佳答案

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

    这意味着C++允许您执行const之类的操作,但C不允许这样做,这可能是出于历史原因。
  • 在C++中,const size_t n = 1; static int array[n];在确定链接中发挥作用。这在C++版本之间是不同的。根据cppreference.com(重点是我的):

    Any of the following names declared at namespace scope have internal linkage:


    • non-volatile non-template (since C++14) non-inline (since C++17) non-exported (since C++20) const-qualified variables (including constexpr) that aren't declared extern and aren't previously declared to have external linkage;


    在C语言中,const根本不影响链接的确定-仅声明范围和存储类说明符很重要。
  • 在C++中,您可以const限定成员函数。在C中这是不可能的,因为它不支持成员函数的语法。
  • C允许在不使用初始化程序的情况下声明const限定的变量。在C语言中,我们可以不使用初始化程序来编写const,但是C++不允许这样做。乍一看,这似乎是C语言中毫无意义的语言错误,但是其基本原理是计算机具有只读的硬件寄存器,其值由硬件而非软件设置。这意味着C仍然适用于与硬件相关的编程。
  • 关于c++ - C语言中的const限定词和C++语言中的const限定词有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60110976/

    相关文章:

    c - LLVM中的指针分析

    c++ - msvcr100d.dll 中未处理的异常

    php - 在 NetBeans 中对 false、true、null 使用小写常量

    c++ - OpenCV:C++ 和 C 性能比较

    c++ - 类模板部分特化问题

    C++ Builder XE5 链接器错误 LME1641

    c - 保护动态分配的数组

    c++ - 我怎样才能将另一个迭代器的地址归因于一个迭代器?

    c++ - 我可以知道变量是否改变了它的值而不用在函数调用 C 中将它与以前的值进行比较吗?

    c++ - 调用 const 函数而不是其非常量版本