C++菜鸟常见错误整理(第十三天)

     人目前还是学生,能力有限,有不足或者错误的地方欢迎大家指正,谢谢大家!

1、#define预处理指令

     例如 #define SECONDS (30)UL

 不能以分号结束,括号的使用,UL表示是无符号长整形

   例如  写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个

    #define MIN((A)<=(B)?(A):(B))//在宏中要把参数用括号括起来

2、const函数的作用

(1)可以定义常量。

(2)const可以修饰函数的参数和返回值,甚至函数的定义体,被const修饰的东西都受到强制保护,

可以预防意外变动,能提高程序健壮性

3、const与#define相比有什么不同

    const常量有数据类型,而宏常量没有,编译器可以对前者进行类型安全检测,而对后者没有类型安全检测,

并且在字符替换中可能会产生医疗不到的错误(边际效应)

    有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。

    在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。 

4、更改const函数成员

    类里的数据成员,加上mutable修饰之后,const的成员函数就可以修改它了。例如

class C{ private:  int a;
 public:
 int A() const
{ return --a; }  }

5、内存对齐问题

下面程序的运行结果是多少
#include<iostream>
using namespace std;
class A1{int a; static int b;};
class A2{int a; char b;};
class A3{int a;flaot b;char c;double d;}
int main(){A1 A;cout<<sizeof(A1)<<sizeof(a)<<sizeof(A2)<<sizeof(A3);return 0;}

    静态变量是放在全局数据区的,而sizeof是计算栈中分配的大小,所以sizeof(A1)是,4sizeof(a)也是4

为了照顾数据对齐,int大小是4,char是1,所以sizeof(A2)是8;

double是8,flaot是4,所以sizeof(A3)是24

    天就到这里,有不足的地方还请指正,谢谢大家!

 

你可能感兴趣的:(sizeof,宏,Const,define,内存对齐)