首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中的const限定符和C++中的const限定符有什么区别?

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

Stack Overflow用户
提问于 2020-02-07 09:51:50
回答 2查看 920关注 0票数 10

我找到了一个评论 of user R..。

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

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

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

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

我的问题是:

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

"const“在C和C++中有什么不同?的答案并没有指出(C语言和C++语言)在const限定符上下文中的确切区别。只有在某一种语言中你不能或可以用它做的事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-07 10:45:41

  • 最重要的区别是,在C++中,const变量是一个常量表达式(甚至在引入C++11 constexpr之前),而C中的const变量不是。 这意味着C++允许您做像const size_t n = 1; static int array[n];这样的事情,但是C不允许这样做,据说是出于历史原因。
  • 在C++中,const起着决定连锁的作用。这在C++版本之间是不同的。根据cppreference.com (强调地雷): 在命名空间范围内声明的下列任何名称都具有内部链接:
代码语言:javascript
复制
- 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-qualified变量。在C中,我们可以在没有初始化器的情况下编写const int x;,但是C++不允许这样做。乍一看,这在C中似乎是一个毫无意义的语言错误,但其基本原理是,计算机拥有由硬件而不是软件设置的值的只读硬件寄存器。这意味着C仍然适用于与硬件相关的编程。
票数 12
EN

Stack Overflow用户

发布于 2020-02-07 10:17:15

来自cppreference.com

const限定符用于非本地、非易失性、非模板(自C++14)、非内联(自C++17)变量的声明,该变量未声明为extern。这不同于C,其中const 文件范围变量具有外部链接。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60110976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档