常数值

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
}

Output

test
test

可以使用指向常数作为函数参数防止函数修改参数通过指针。

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

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

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

不能声明构造函数或析构函数具有 const 关键字的。

357syhfh.collapse_all(zh-cn,VS.110).gifC 和 C++ const 差异

在声明变量为 c. 源代码文件中 const ,则将其作为:

const int i = 2;

在另一个模块可使用此变量如下所示:

extern const int i;

但是,获取在 C++ 中相同的行为,必须声明 const 变量如下所示:

extern const int i = 2;

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

extern "C" const int x=10;

防止出现由 C++ 编译器的名称。

请参见

参考

const (C++)

常量成员函数