亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶空括號的默認構造函數

帶空括號的默認構造函數

月關寶盒 2019-05-24 15:33:20
帶空括號的默認構造函數有沒有什么好的理由在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>{}};

有了這個,就無法將其解釋為函數聲明。


查看完整回答
反對 回復 2019-05-24
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

因為它被視為函數的聲明:


int MyFunction(); // clearly a function

MyObject object(); // also a function declaration


查看完整回答
反對 回復 2019-05-24
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

相同的語法用于函數聲明 - 例如函數object,不帶參數和返回MyObject


查看完整回答
反對 回復 2019-05-24
?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

因為編譯器認為它是函數的聲明,不接受任何參數并返回MyObject實例。


查看完整回答
反對 回復 2019-05-24
  • 4 回答
  • 0 關注
  • 866 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號