C + +中的c o n s t默认为内部连接,也就是说,c o n s t仅在c o n s t被定义过的文件里才是可见的,而在连接时不能被其他编译单元看到。当定义一个常量(c o n s t)时,必须赋一个值给它,除非用e x t e r n作了清楚的说明:
extern const bufsize;
虽然上面的e x t e r n强制进行了存储空间分配(另外还有一些情况,如取一个c o n s t的地址,也要进行存储空间分配),但是C + +编译器通常并不为c o n s t分配存储空间,相反它把这个定义保存在它的符号表里。当c o n s t被使用时,它在编译时会进行常量折叠。也就是说,编译器在编译时可以通过必要的计算把一个复杂的常量表达式缩减成简单的。
c o n s t可以用于集合,但编译器不能把一个集合存放在它的符号表里,所以必须分配内存。
在这种情况下,c o n s t意味着“不能改变的一块存储”。然而,其值在编译时不能被使用,因为
编译器在编译时不需要知道存储的内容。
const int a[] = {1,2,3};
float f[a[1]]; //非法
C编译器不能把c o n s t看成一个编译期间的常量。在C中,
如果写:
const bufsize=100;
char buf[bufsize];
尽管看起来好像做了一件合理的事,但这将得到一个错误结果。因为b u f s i z e占用存储的某个地
方,所以C编译器不知道它在编译时的值。在C语言中可以选择这样书写:
const bufsize;
这样写在C + +中是不对的,而C编译器则把它作为一个声明,这个声明指明在别的地方有存储
分配。因为C默认c o n s t是外部连接的。
指向const的指针
const int* x;
从标识符开始,是这样读的:“x是一个指针,它指向一个const int。”这里不需要初始化,因为
说x可以指向任何东西(那是说,它不是一个c o n s t),但它所指的东西是不能被改变的。
int* const x=&d;
现在它读成“ x是一个指针,这个指针是指向i n t的c o n s t指针”。因为现在指针本身是c o n s t指针,
编译器要求给它一个初始化值,这个值在指针寿命期间不变。然而要改变它所指向的值是可以
的,可以写* x = 2;
临时变量通过引用被传递给一个函数时,这个函数的参数一定是常量(c o n s t)引用。
void f(X&x);
void g(const X&x);
X x = new X();
f(x); //非法
g(x);//合法
编译期间类里的常量
因为在类对象里进行了存储空间分配,编译器不能知道c o n s t的内容是什么,所以不能把它
用作编译期间的常量。这意味着对于类里的常数表达式来说,c o n s t就像它在C中一样没有作用。
我们不能这样写:
class food{
const int SIZE=100;
int a[SIZE]; //非法
...
在类里面要使用常量可以使用enum,使用e n u m是不会占用对象中的存储空间的,枚举常量在编译时被全部求值
class food{
enum{SIZE=100};
int a[SIZE]; //合法
一个类如果是const,那这个类只能调用const的成员函数,非const的成员函数调用会产生编译时错误,要想在const成员函数里面改变成员变量的值,可以将成员变量定义为mutable
class Y{
int i;
mutable j;
public:
Y();
void f() const;
};
void Y::f() const{
i++; //非法 const成员函数不能改变成员变量的值
j++; //合法 const成员函数可以改变mutable成员变量的值
}
分享到:
相关推荐
C++ const 使用详解 C++ 中的 const 关键字是非常重要的,它可以用来修饰变量、指针、函数参数、返回值、成员函数等,具有非常多的用途。下面将对 const 的使用做详细的解释。 一、const 基础 const 关键字可以...
C++ const使用 编译连接详解 PPT版本 非常好用的,我是偷偷从别人电脑里找出来的
四、类成员函数中的const使用 const关键字在类成员函数中的使用具有特殊含义,它可以声明一个成员函数为常量函数。这意味着该函数不会修改任何成员变量。 ```cpp void fun1() const; // 声明fun1为常量成员函数,...
在C++编程语言中,`const`关键字是一个非常重要的特性,它用于定义常量和声明不可修改的对象。本文将深入探讨`const`在C++中的各种应用,帮助你更好地理解和运用这一关键概念。 1. 常量声明: `const`关键字用于...
### C++中的`const`关键字详解 在C++编程语言中,`const`关键字是一个非常重要的概念,它用于声明常量、限定函数参数以及优化内存管理。本文将深入探讨`const`关键字的各种用法和其背后的原理,帮助读者更全面地...
以下是对`const`在C++中使用的详细说明: 1. **`const`修饰指针** - `const`位于星号左侧:`const int *a` 表示指针`a`指向的变量是常量,即`a`不能改变其指向的`int`型数值。 - `const`位于星号右侧:`int * ...
const 在 C++ 中占有重要作用,属于小兵立大功的典型,本文档详细介绍了如何使用 const。 1. const 常量 在 C++ 中,const 可以用来修饰变量,称为常量。例如:const int max = 100; 这种常量有数据类型,编译器...
熟练掌握 `const` 的使用方法对于编写高质量的 C++ 代码至关重要。本文将详细介绍 `const` 在 C++ 中的各种应用场景,并给出具体的示例以便于理解。 #### 二、const修饰普通变量和指针 `const` 可以用来修饰变量、...
### C++中Const关键字的理解与应用 #### 一、Const关键字的基本概念 在C++编程语言中,`const`关键字是一种类型限定符,用于声明常量或者指定对象的一部分为不可变。通过`const`关键字,程序员可以明确指出某些...
在C++和C编程语言中,`const`关键字是一个非常重要的概念,它涉及到常量、常量指针、指针常量以及常量指针常量等多方面的知识。`const`关键字的主要作用是限制变量的修改,以提高程序的安全性和可读性。下面将详细...
正确使用const关键字可以大大改善程序的健壮性和可读性。 1. Const常量 Const常量是一种非常有用的工具,它可以用来定义一个不变的值,这种值在程序的整个生命周期中保持不变。Const常量有数据类型,而宏常量没有...
《深入理解C++ const特性》 C++中的`const`关键字是一个非常重要的概念,它用于定义常量、常量指针、常量引用等,帮助我们编写更安全、高效的...理解和熟练掌握`const`的使用,是成为专业C++开发者的必备技能之一。
在C++编程语言中,`const`关键字是一个非常重要的特性,用于表示不可变性。它在不同的上下文中有多种用途,包括声明常量、指针和引用,以及在函数参数和返回值...理解并正确使用`const`是编写高效、可靠C++代码的关键。
C++ const 用法详解 本文旨在详细介绍 C++ 中的 const 关键字的用法和注意事项。const 是 C++ 语言中一个非常重要的关键字,它可以用来限定变量的读写权限,避免不必要的内存分配,提高程序的健壮性等。 1. 限定符...
### C++中的`const`关键字全面解析 #### 一、`const`的作用 在C++中,`const`关键字主要用于创建常量或者指定某些部分不可修改。它可以帮助开发者明确指出哪些部分是不应该被更改的,从而提高代码的安全性和可读性...
C++ Const 思考 误区 新手的福音
### C++中的const限定修饰符 #### 一、引言 在C++编程语言中,`const`关键字是一个非常重要的特性,它可以帮助开发者确保某些数据或对象在其生命周期内的不变性,从而提高代码的安全性和可维护性。本文将详细介绍`...
`const`与指针结合使用时,可以有三种主要形式: - `const int *a;` 表示`a`是一个指向`const` int的指针,也就是说,通过`a`所指向的整型数据是不可以修改的。 - `int * const a;` 表示`a`是一个指向整型数据的...
徐彤老师耗时三年倾心制作,专业录制,通俗想,细致的讲解了C++ 编程从入门到高级