筆記積累 ——————————2018年11月8日————————
1、成員變量初始化問題:(https://blog.csdn.net/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.csdn.net/bianlongpeng/article/details/77199272
對於非內部數據類型的輸入參數,應該將“值傳遞”改爲“const”引用,目的是提高效率,如將void Func(A a)改爲void Fun(const A &a).
第二,對於內部數據類型的輸入參數,不需要將“值傳遞”方式改爲“const引用傳遞”,否則可能降低了函數的可理解性,如void func(int x) 不應該改爲void Func(const int&x)
返回值問題 參加以上博客