笔记积累 ——————————2018年11月8日————————
1、成员变量初始化问题:(https://blog.youkuaiyun.com/no_sying_nothing/article/details/51958547 )
总结:
1.成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关。
2.如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
3.类中const成员常量必须在构造函数初始化列表中初始化。
4.类中static成员变量,只能在类内外初始化(同一类的所有实例共享静态成员变量)。
2、如果写的函数需要传入一个指针,是否需要为该指针加上一个const,把const加在指针的不同位置是否有区别?
答:const是来声明一个常量,当不想让值修改时就用const.
(指针前需要加入一个const,const的作用是防止指针在函数体内被意外修改)
当const修饰指针时:
int b=100;
const int*a=&b; [1]
int const *a=&b; [2]
int* const a=&b; [3 ]
const int* const a=&b; [4]
如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;因此,[1]和[2]的情况相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),这种情况下不允许对内容进行更改操作,如不能*a=3;
如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量,[3]为指针本身是常量,而指针所指向的内容不是常量,。这种情况下不能对指针本身更改操作,如a++是错误的;
[4]为指针本身和指向的内容均为常量。
拓展问题:如果写的函数需要传入的参数是一个复杂类型的实例,面试官可能会问传入值参数或者引用参数有什么区别,什么时候需要为传入的引用参数加上const?
答案:https://blog.youkuaiyun.com/bianlongpeng/article/details/77199272
对于非内部数据类型的输入参数,应该将“值传递”改为“const”引用,目的是提高效率,如将void Func(A a)改为void Fun(const A &a).
第二,对于内部数据类型的输入参数,不需要将“值传递”方式改为“const引用传递”,否则可能降低了函数的可理解性,如void func(int x) 不应该改为void Func(const int&x)
返回值问题 参加以上博客