構造函數中這個奇怪的冒號成員(“:”)語法是什最近我見過如下例子:#include <iostream>class Foo {public:
int bar;
Foo(int num): bar(num) {};};int main(void) {
std::cout << Foo(42).bar << std::endl;
return 0;}這奇怪: bar(num)意味著什么?它似乎初始化成員變量,但我以前從未見過這種語法。它看起來像一個函數/構造函數調用,但對于一個int?對我沒有任何意義。也許有人可以啟發我。而且,順便說一下,還有其他類似的深奧語言功能,你永遠不會在一本普通的C ++書中找到它嗎?么?
3 回答
慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
這是一個成員初始化列表。您應該在任何好的C ++書籍中找到有關它的信息。
在大多數情況下,您應該初始化成員初始化列表中的所有成員對象(但是,請注意FAQ條目末尾列出的例外情況)。
FAQ條目的主要內容是,
在所有其他條件相同的情況下,如果使用初始化列表而不是賦值,則代碼將運行得更快。
有只小跳蛙
TA貢獻1824條經驗 獲得超8個贊
這是構造函數的初始化。這是在類構造函數中初始化成員的正確方法,因為它可以防止調用默認構造函數。
考慮這兩個例子:
// Example 1Foo(Bar b){
bar = b;}// Example 2Foo(Bar b)
: bar(b){}在示例1中:
Bar bar(); // default constructorbar = b; // assignment
在示例2中:
Bar bar(b) // copy constructor
這完全取決于效率。
- 3 回答
- 0 關注
- 864 瀏覽
添加回答
舉報
0/150
提交
取消
