帶空括號的默認構造函數有沒有什么好的理由在C ++中調用默認構造函數時,一組空的圓括號(括號)無效?MyObject object; // ok - default ctorMyObject object(blah); // okMyObject object(); // error我似乎每次都自動輸入“()”。是不是有一個很好的理由不允許這樣做?
4 回答
UYOU
TA貢獻1878條經驗 獲得超4個贊
最煩惱的解析
這與所謂的“C ++最令人煩惱的解析”有關?;旧希魏慰梢员痪幾g器解釋為函數聲明的東西都將被解釋為函數聲明。
同一問題的另一個例子:
std::ifstream ifs("file.txt");std::vector<T> v(std::istream_iterator<T>(ifs), std::istream_iterator<T>());v 被解釋為具有2個參數的函數聲明。
解決方法是添加另一對括號:
std::vector<T> v((std::istream_iterator<T>(ifs)), std::istream_iterator<T>());
或者,如果您有C ++ 11和列表初始化(也稱為統一初始化)可用:
std::vector<T> v{std::istream_iterator<T>{ifs}, std::istream_iterator<T>{}};有了這個,就無法將其解釋為函數聲明。
心有法竹
TA貢獻1866條經驗 獲得超5個贊
因為它被視為函數的聲明:
int MyFunction(); // clearly a function
MyObject object(); // also a function declaration
- 4 回答
- 0 關注
- 866 瀏覽
添加回答
舉報
0/150
提交
取消
