- C++中我們可以用static修飾一個類的成員函數,也可以用const修飾類的成員函數(寫在函數的最後表示不能修改成員變量,不是指寫在前面表示返回值爲常量)。請問:能不能同時用static和const修飾類的成員函數?
分析:答案是不可以。C++編譯器在實現const的成員函數的時候爲了確保該函數不能修改類的實例的狀態,會在函數中添加一個隱式的參數const this*。但當一個成員爲static的時候,該函數是沒有this指針的。也就是說此時static的用法和static是衝突的。
我們也可以這樣理解:兩者的語意是矛盾的。static的作用是表示該函數只作用在類型的靜態變量上,與類的實例沒有關係;而const的作用是確保函數不能修改類的實例的狀態,與類型的靜態變量沒有關係。因此不能同時用它們。 - C++中靜態成員函數能不能同時也是虛函數?
分析:答案是不能。調用靜態成員函數不要實例。但調用虛函數需要從一個實例中指向虛函數表的指針以得到函數的地址,因此調用虛函數需要一個實例。兩者相互矛盾。 - main 主函數執行完畢後,再執行一段代碼
答案:可以用_onexit 註冊一個函數
void main( void )
{
String str("zhanglin");
_onexit( fn1 );;
printf( "This is executed first.\n" );
}
int fn1()
{
printf( "next.\n" );
return0;
}
4. C++是不是類型安全的?
答案:不是。兩個不同類型的指針之間可以強制轉換(用reinterpret cast)
5. 用C++風格的類型轉換符而不要用C風格的
答案: 使用新類型轉換符的程序更容易被解析(無論是對人工還是對工具程序),它們允許編譯器檢測出原來不能發現的錯誤。
6. 隱式類型轉換的害處: More Effective C++, Item M5.
7. 前加(++i),返回值是自身的reference.;後加(i++)返回值是const A,這樣做,可以防止i++++。這也是const A作爲返回值的一個例子。