繁体   English   中英

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

[英]What is the difference between the const qualifier in C and the const qualifier in C++?

我找到了用户R..评论

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

我知道,那之间的一个区别const用C预选赛和const在C ++预选赛是其默认的联动。

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

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

我的问题:

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

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

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

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

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

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


    • 非易失性非模板(因为C ++ 14)非内联(因为C ++ 17)非出口(因为C ++ 20),其不被声明extern和const限定的变量(包括constexpr)AREN” t 先前声明有外部联系;

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

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

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

cppreference.com

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM