C++常量折叠和类中const、static成员变量初始化
来源:互联网 发布:iphone高速摄影软件 编辑:程序博客网 时间:2024/06/08 23:03
1.常量折叠
定义:
常量折叠:是其中一种被很多现代编译器使用的编译器优化技术。常量折叠是在编译时间简单化常量表达的一个过程。简单来说就是将常量表达式计算求值,并用求得的值来替换表达式,放入常量表。可以算作一种编译优化。
const int a=1;//C++用法#define b 1 //C用法</span>
C++中用const修饰符定义常量a,该常量a从表面上看等同于C语言中#define定义的常量b,相同的地方:在预编译阶段,编译器会将a和b作用域内的符号为a和b替换为1;不同点是,C++中,会为a分配内存,将a存储在常量表中,然而,b将不会被分配内存存储,也就是在预编译后,符号b就不复存在。具体表现在程序上,有什么区别呢,看下面举例代码:
const int a=1;//C++代码int *p=(int *)(&a);*p=2;cout<<"*p="<<*p<<",a="<<a<<endl;
#define b 1int main()//C代码{int *p=(int *)(&b);*p=2;printf("*p=%d,b=%d",*p,b);return 0;}C++代码没问题,会正常输出*p=2,a=1
然而C代码却不行,因为b是不分配内存的,int *p=(int *)(&b);报错
2.C++类中static、const修饰的变量初始化
对于成员变量是const类型,两种方式初始化:
I.定义的时候,对变量初始化:const int a=0;
II.构造函数时,用参数初始化表对数成员初始化
class Time{private:const int a;//公有、私有、保护类型都可以public:Time(int c):a(c){} };
对于成员变量是static类型,有两种方式初始化:
I.类外初始化,如下代码所示:
class Time{private:static int b;//公有、私有、保护类型都可以public:Time(){} };int Time::b=0;II.在构造函数时初始化,而且只能在函数中:
class Time{private:static int a;//公有、私有、保护类型都可以public:Time(int d){ b=d; } };
对于成员变量是const 和static类型的,只能够直接赋值:static const int a=0;
【注】如果有哪里不对或者不妥的地方,欢迎评论指正~
1 0
- C++常量折叠和类中const、static成员变量初始化
- c++类中static、const、static const成员变量初始化
- c++类中const/static/const static成员变量初始化
- 类中static静态变量与const常量成员的初始化
- C++类static静态成员变量和const常量成员变量(和引用相同)初始化方法
- 类中静态变量与const常量成员的初始化
- 类中静态变量与const常量成员的初始化
- 类内const static(static const)成员变量初始化问题
- C++ 类的const常量,Static变量和…
- C++ 常量折叠和C语言中const常量对比
- 浅谈C++中类的const成员变量,static成员变量和const static成员变量的区别
- 初始化const, static, const static, static const成员变量
- 初始化const, static, const static, static const成员变量
- 类的const成员变量、static const、static成员变量的初始化
- 类的const成员变量、static const、static成员变量的初始化
- C++中类const、static、static const成员变量
- 类的const变员变量和static成员变量的初始化总结
- C++中static const类成员变量
- java,file,算法,加密解密,java源码
- android Service总结
- FFMPEG学习资料
- java 获取可用的打印机列表 和 当前默认打印机
- Linux 下smi/mdio总线通信
- C++常量折叠和类中const、static成员变量初始化
- 31. Next Permutation
- mongoDB性能篇——mongoDB数据库索引
- android studio如何使用git
- ASP.NET基础入门(杂)
- C++中int,float,string,char*的转换(待续)
- 模板、泛型、STL之间的关系
- C++ 共享指针 shared_ptr
- 【NGUI】 NGUI 防止UI穿透物体事件