常量值

const 关键字指定变量的值是常量并通知编译器防止程序员修改它。

// constant_values1.cpp
int main() {
   const int i = 5;
   i = 10;   // C3892
   i++;   // C2105
}

在 C++ 中,可以使用 const 关键字而不是 #define 预处理器指令来定义常量值。 使用 const 定义的值需要接受类型检查,并可以替代常量表达式。 在 C++ 中,可以使用 const 变量指定数组的大小,如下所示:

// constant_values2.cpp
// compile with: /c
const int maxarray = 255;
char store_char[maxarray];  // allowed in C++; not allowed in C

在 C 中,常量值默认为外部链接,因此它们只能出现在源文件中。 在 C++ 中,常量值默认为内部链接,这使它们可以出现在标头文件中。

const 关键字还可在指针声明中使用。

// constant_values3.cpp
int main() {
   char *mybuf = 0, *yourbuf;
   char *const aptr = mybuf;
   *aptr = 'a';   // OK
   aptr = yourbuf;   // C3892
}

指向声明为 const 的变量的指针只能赋给也声明为 const 的指针。

// constant_values4.cpp
#include <stdio.h>
int main() {
   const char *mybuf = "test";
   char *yourbuf = "test2";
   printf_s("%s\n", mybuf);

   const char *bptr = mybuf;   // Pointer to constant data
   printf_s("%s\n", bptr);
   
   // *bptr = 'a';   // Error
}

输出

test
test

可以将指向常量数据的指针用作函数参数,以防止函数修改通过指针传递的参数。

对于声明为 const 的对象,只能调用常量成员函数。 这将确保从不修改常量对象。

birthday.getMonth();    // Okay
birthday.setMonth( 4 ); // Error

可以为非常量对象调用常量或非常量成员函数。 还可以使用 const 关键字重载成员函数;这使得可以对常量和非常量对象调用不同版本的函数。

不能使用 const 关键词声明构造函数和析构函数。

C 和 C++ const 的差异

当在 C 源代码文件中将变量声明为 const 时,您将通过以下方式实现:

const int i = 2;

您随后可以在另一个模块中使用此变量,如下所示:

extern const int i;

但若要获取与 C++ 中相同的行为,则必须将 const 变量声明为:

extern const int i = 2;

如果希望在 C++ 源代码文件声明用于 C 源代码文件的 extern 变量,请使用:

extern "C" const int x=10;

以防止 C++ 编译器进行名称重整。

请参见

参考

const (C++)

常量成员函数