#define、const以及sizeof

来源:互联网 发布:网络视频直播平台排行 编辑:程序博客网 时间:2024/06/03 11:34

写在前面的:虽说是c++的学习,但是基本语法和面向对象的思想多少懂一点,所以觉得转c++学习不是很难,所以就开始了学c++。虽说以前自己学的是java,但是编程经验不是太多而且基本上没怎么深入的学习。其实当一开始学习编程的时候大家都说从一门语言开始,然后深入学习这门语言。但是实际上本来编程就不是一个短期的过程,很少有人一开始就精通哪门语言,基本是大体语法会、思想有点然后就开始了这条“程序猿”之路。我也是看到了大公司的笔试题以及剑指offer等书上的题目大部分都是c/c++才开始学c++的。希望这次一定要认认真真的把一些细节弄清楚,不要认为以前的时间都浪费了。

一:#define 宏定义大家都应该清楚,反正我是不清楚有以下的注意事项:

1.

<span style="white-space:pre"></span>#define PI 3.1415926

注意行尾没有分号。

2.宏定义的变量约定命名为大写的。

3.如果后面的宏用到了前面的,要用宏的名字表示比较好。

4.宏定义尽量不用++之类的运算符以免产生边界效应,所以在用表达式定义宏的时候要用括号括起来如:

<span style="white-space:pre"></span>#define SECOND_YEAR (60*60*24*365)
缺点:

1.#define没有类型,从他的声明中可以看出他没有变量类型,也就是说当你定义一个宏的时候可以随意指定他的类型,因为他根本就没类型,但是在使用的位置肯定是有类型的,所以要注意。

2.宏定义的替换发生在编译期间,也就是说替换了多少个就保存了多少个副本,相比于const内存是要浪费一点的。但是因为他的替换实在编译期间,所以在运行时你根本无法改变他的值,因为他是一个直接数连变量名都没有,所以其值不可变,const的值通过一些办法是可以改变的。(后面会谈到)
二:const

const修饰变量时:

1.该变量只能读

2.可以避免不必要的内存分配,和java的常量池很想于是类比一下final就可以想通的,在运行过程中const类型的变量在内存中只有一个副本。

3.const的常量是可以通过曲线救国的方式修改的:

   

const int i = 0;int *j = (int *)&i;j = 1;
const修饰方法时:

首先看一下比较诡异的声明方法:

Class Test{     public :     int cout = 100;      int  tt() cost{           return cont;      }}

const竟然放在后面,不知道原因或许是因为特殊的东西有特殊的待遇吧。

这里要注意的是声明为const的方法不能调用非const的方法

0 0
原创粉丝点击