首页 > 编程语言 >2.C/C++的const

2.C/C++的const

时间:2022-08-17 13:12:18浏览次数:61  
标签:const 变量 数据类型 C++ 修饰 define

1.C语言的const修饰的变量都有空间

2.C语言的const修饰的全局变量具有外部链接属性

3.C++语言的const修饰的变量有时有空间,有时没有空间(发生常量折叠,且没有对变量进行取址操作)

const int aa = 10;//没有内存

void test01()
{
	//发生了常量折叠
	cout << "aa=" << aa << endl;//在编译阶段,编译器:cout<<"aa="<<10<<endl;

	//禁止优化volatile
	//volatile const int bb = 20;//栈区
	 const int bb = 20;
	int *p = (int*)&bb;//进行了取址操作,所以有空间
	*p = 200;
	cout << "bb=" << bb << endl;//cout << "bb=" << 20 << endl;
	cout << "*p=" << *p << endl;

	cout << "a的地址=" << (int)&bb << endl;
	cout << "p指向的地址" << (int)p << endl;


}

4.C++语言中const修饰的全局变量具有内部链接属性

extern const int c = 300;//加上extern就变为外部链接属性

5.C++编译器不能优化的情况

 1.不能优化自定义数据类型

 2.如果用变量给const修饰的局部变量赋值,那么编译器就不能优化

 3.编译器是在编译阶段来优化数据

6.尽量用const替代define

 1.define没有数据类型,const修饰的变量有数据类型,可以进行数据类型检查

#define MA 128
const short ma = 128;
void func(short a)
{
	cout << "func(short a)" << endl;
}

void func(int a)
{
	cout << "func(int a)" << endl;
}
int main()
{
	func(ma);
	system("pause");
	return EXIT_SUCCESS;
}

 2.const修饰的变量有作用域,define不重视作用域,不能限定常量的使用范围

标签:const,变量,数据类型,C++,修饰,define
From: https://www.cnblogs.com/codemagiciant/p/16594767.html

相关文章

  • C++primer练习14.1-9
    练习14.1在什么时候情况下重载的运算符与内置运算符有所区别?在什么时候重载的运算符又与内置运算符一样::为类设计的运算符,尽量重载的运算符含义不要改变,如+还是加法练习1......
  • C++ typeid获取类型信息
    #include<iostream>#include<typeinfo>intmain(){inti;conststd::type_info&info=typeid(int);std::cout<<"typeid"<<info.name()<<std::......
  • C++ beginner(2)- variable
    initializationintx{};//xisfilledwithzeroes,sox==0intx{123};intx(123);inta,b=123,c{},d{456},e(789);int*x,y,z;==int*x;inty;int......
  • C++ 调整终端界面的大小
    #include<iostream>#include<string>#include<windows.h>#defineWIDTH40#defineHEIGHT15usingnamespacestd;voidinit(){//初始化终端界面char......
  • uec++ 1天
    用来让不是商店下载的ue进行注册        ufunction(exec)用来实现引擎中实现函数uclass staticclass 进行虚幻模拟反射机制 ......
  • [Typescript] Making TypeScript Stick - 6 - infer, build a ConstructorArg Type
    ForexamplewehaveaWebpackclass:classWebpackCompiler{constructor(options:{amd?:false|{[index:string]:any}bail?:booleancache?:......
  • C++primer练习13.55-58
    练习13.55为你的StrBlob添加一个右值引用版本的Push_backvoidStrBlob::push_back(string&&s){data->push_back(std::move(s));}练习13.56如果sorted定义如下,会发生......
  • constraint的on与off以及with约束
    modulecrv;classPCIBus;randbit[15:0]addr;randbit[31:0]data;constraintaddrw{addr[7:0]=='h01;}constraintdataw{data[15:0]=='h......
  • Constraint
    1moduletop;2classPacketBase;3randbit[7:0]src;4randbit[5:0]len;5randbit[7:0]payld[];6constraintpayload_size{payld.size......
  • 约束(constraint)
    约束(constraint):         1.数据完整性(DataIntegrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。           它是防止......