C 中的 const 限定符和 C++ 中的 const 限定符有什么区别?
What is the difference between the const qualifier in C and the const qualifier in C++?
我找到了 comment of user R..:
C and C++ are not the same language. In particular, C const
has nothing to do with C++ const
.
我知道,C 中的 const
限定符和 C++ 中的 const
限定符之间的一个区别是它的默认链接。
在 C++ 中使用 const
限定符在命名空间范围内声明的对象具有内部链接,而在 C 中,在全局范围内声明的具有 const
限定符的对象(没有 static
限定符在 const
) 之前有外部链接。
但是 C 和 C++ 语言之间还有什么不同呢?我认为两者在两种语言中都有相同的概念和目的。
我的问题:
- C 中的 const 限定符和 C++ 中的 const 限定符有什么区别?
How does "const" differ in C and C++? 的答案并未指出 C 和 C++ 语言在 const
限定符上下文中的确切区别。只有你不能用某种语言做或可以用它做的事情。
The const
qualifier used on a declaration of a non-local non-volatile non-template (since C++14) non-inline (since C++17) variable that is not declared extern
gives it internal linkage. This is different from C where const
file scope variables have external linkage.
除此之外 const
在 C 和 C++ 中具有相同的语义,带有 const
的 C 头文件通常被编译为带有条件 "extern C"
.
的 C++ 头文件
最重要的区别是,在 C++ 中,const
变量是常量表达式(甚至在引入 C++11 constexpr
之前),但是 const
C 中的变量不是。
意味着 C++ 允许你做类似 const size_t n = 1; static int array[n];
但 C 不允许的事情,据说是出于历史原因。
在 C++ 中,const
参与确定链接。这在 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
根本不参与确定链接 - 只有声明范围和存储 class 说明符很重要。
在 C++ 中,您可以 const
限定成员函数。这在 C 中是不可能的,因为它没有对成员函数的语法支持。
C 允许在没有初始值设定项的情况下声明符合 const
条件的变量。在 C 中,我们可以编写 const int x;
而不使用初始化器,但 C++ 不允许这样做。乍一看,这似乎是 C 语言中一个无意义的语言错误,但其基本原理是计算机具有只读硬件寄存器,其值由硬件而非软件设置。这意味着 C 仍然适合与硬件相关的编程。
我找到了 comment of user R..:
C and C++ are not the same language. In particular, C
const
has nothing to do with C++const
.
我知道,C 中的 const
限定符和 C++ 中的 const
限定符之间的一个区别是它的默认链接。
在 C++ 中使用 const
限定符在命名空间范围内声明的对象具有内部链接,而在 C 中,在全局范围内声明的具有 const
限定符的对象(没有 static
限定符在 const
) 之前有外部链接。
但是 C 和 C++ 语言之间还有什么不同呢?我认为两者在两种语言中都有相同的概念和目的。
我的问题:
- C 中的 const 限定符和 C++ 中的 const 限定符有什么区别?
How does "const" differ in C and C++? 的答案并未指出 C 和 C++ 语言在 const
限定符上下文中的确切区别。只有你不能用某种语言做或可以用它做的事情。
The
const
qualifier used on a declaration of a non-local non-volatile non-template (since C++14) non-inline (since C++17) variable that is not declaredextern
gives it internal linkage. This is different from C whereconst
file scope variables have external linkage.
除此之外 const
在 C 和 C++ 中具有相同的语义,带有 const
的 C 头文件通常被编译为带有条件 "extern C"
.
最重要的区别是,在 C++ 中,
const
变量是常量表达式(甚至在引入 C++11constexpr
之前),但是const
C 中的变量不是。意味着 C++ 允许你做类似
const size_t n = 1; static int array[n];
但 C 不允许的事情,据说是出于历史原因。在 C++ 中,
const
参与确定链接。这在 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
根本不参与确定链接 - 只有声明范围和存储 class 说明符很重要。在 C++ 中,您可以
const
限定成员函数。这在 C 中是不可能的,因为它没有对成员函数的语法支持。C 允许在没有初始值设定项的情况下声明符合
const
条件的变量。在 C 中,我们可以编写const int x;
而不使用初始化器,但 C++ 不允许这样做。乍一看,这似乎是 C 语言中一个无意义的语言错误,但其基本原理是计算机具有只读硬件寄存器,其值由硬件而非软件设置。这意味着 C 仍然适合与硬件相关的编程。