const修饰规则

const指针和指向const变量的指针,在写法上容易让人混淆,记住一个规则:从左至右,依次结合,const就近结合

比如,int * const p:
1.int * (const p):变量p经过Const修饰,为只读变量
2.int (*(const p)):(const p)作为一个整体成为一个只读指针指向int型变量
3.(int(*(const p))):(*const p)作为一个整体,只读指针p指向Int型变量
于是,int * const p:一个指向整型变量的Const型指针

再比如, const int *p:
1.const int (*p):变量p是一个指针
2. (const int) (*p): (const就近结合)变量p指向一个const类型的整型
于是,const int *p: 一个指向const整型变量的指针

时间: 2024-10-12 09:07:58

const修饰规则的相关文章

const修饰函数参数 const修饰函数返回值 const修饰成员函数

看到const 关键字,C++程序员首先想到的可能是const 常量.这可不是良好的条件反射.如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮.const 更大的魅力是它可以修饰函数的参数.返回值,甚至函数的定义体. const 是constant 的缩写,"恒定不变"的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:"Use const whenever you need". 1

C++ 编译器的函数名修饰规则

C++ 编译器的函数名修饰规则 函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型.LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置. 多数情况下程序员并不需要知道函数的名字修饰,LINK程序或其他工具会自动区分他们.当然,在某些情况下需要指定函数的名字修饰,例如在C++程序中, 为了让LINK程序或其他工具能够匹配到正确的函数名字,就必须为重载函数和一些特殊的函数(如

【转载】C++ 编译器的函数名修饰规则

转载自:http://mxdxm.iteye.com/blog/510486 C++ 编译器的函数名修饰规则 函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型.LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置.多数情况下程序员并不需要知道函数的名字修饰,LINK程序或其他工具会自动区分他们.当然,在某些情况下需要指定函数的名字修饰,例如在C++程序中,为了让LINK程

C++中 容易忽视的const 修饰符

C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误!(如类型不匹配问题) (2)编译器处理方式不同.define宏是在预处理阶段展开,const常量是编译运行阶段使用. (3)存储方式不同.define宏仅仅是展开,有很多地方使用,就展开多少次,不会分配内存.const常量会在内存

静态成员函数不能采用const修饰的原因

静态成员函数不能用const修饰 ,也不能存取nonstatic数据 C++中静态成员函数不能用const修饰的原因: static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数.这意味着一个静态成员函数只能访问它的参数.类的静态数据成员和全局变量. 不能用const的原因:一个静态成员函数访问的值是其参数.静态数据成员和全局变量,而这些数据都不是对象状态的一部分.而对成员函数中使用关键字const是表明:函数不会修改该函数访问的目标对象的数据成员.既然一个静态成员函

C 和C++ 名称修饰规则

C名称修饰规则 1.对于使用__cdecl调用约定的函数,在函数名称前加一下划线,不考虑参数和返回值. 2.对于使用__fastcall调用约定的函数,在函数名称前后各加一@符号,后跟参数的长度,不考虑返回值. 例如 extern “C” int __fastcall Test(int n)的修饰名称为@[email protected] 3.对于使用 __stdcall 标准调用约定的函数,在函数名称前加一下划线,名称后加一@符号,后跟参数的长度,不考虑返回值. 例如 extern “C” i

const修饰的常量 不能被直接修改 但是可以通过指针进行间接修改

大家都知道如下代码中,被const限定的a是不可以被直接修改的 void main() { const int a = 3; a=1; } 在C++中const修饰的常量,不能被直接修改,但是可以通过指针进行间接修改 来看下面的例子:           原意是想通过指针修改const常量a的值,但是运行后发现输出的a依然是3,a的值表面上并没有被改变. 但是查看内存窗口,发现a已经被改变,这里是编译器优化导致的,遇见a时编译器直接从寄存器中读取3给a,而不从内存中读取! 为了改善这种状况,我们

const修饰符简述

1.const限定符的使用 1)定义const常量:const可以将一个对象变成常量,不可被修改(只读类型),在定义时必须进行初始化.例如: const double mathPI = 3.141592653; 2)修饰函数的参数.返回值等.被const修饰的东西将不再改变: 3)若在整个程序中使用其他文件的变量: //若变量为非const //file_1.cpp int months = 10; //file_2.cpp extern int months; //const修饰的变量 //f

C++的const修饰

C++的const修饰 ?const的两个用途? (1)可以定义 const 常量  (2)const 可以修饰函数的参数.返回值. const的好处 (1)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患! (2)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性! (3)可以节省空间,避免不必要的内存分配(常量宏)! (4)提高了效率. 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为     一个编译期间的常量,没有了存储与读内存的操作