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

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

沒有參數的構造函數上沒有括號是語言標準嗎?

沒有參數的構造函數上沒有括號是語言標準嗎?

C++
慕勒3428872 2019-12-15 16:12:25
我正在使用g ++在Cygwin中編譯C ++程序,并且有一個其構造函數沒有參數的類。我的臺詞是:MyClass myObj();myObj.function1();當嘗試編譯它時,我得到了消息:error: request for member 'function1' in 'myObj', which is of non-class type 'MyClass ()()'經過一番研究,我發現解決方法是將第一行更改為MyClass myObj;我可以發誓我以前在C ++中用括號完成了空的構造函數聲明。這可能是對我使用的編譯器的限制嗎?還是語言標準真的說不對沒有參數的構造函數使用括號?
查看完整描述

3 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

盡管MyClass myObj();可以使用空的初始化程序或函數聲明將其解析為對象定義,但語言標準指定始終解決歧義,而傾向于函數聲明。在其他上下文中(例如,在new表達式中或構造值初始化的臨時值時),可以使用空括號初始化程序


查看完整回答
反對 回復 2019-12-16
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

這被稱為最令人煩惱的解析問題。當解析器看到


MyClass myObj();

它認為您正在聲明一個myObj沒有參數的函數,并返回MyClass。


要解決此問題,請使用:


MyClass myObj;



查看完整回答
反對 回復 2019-12-16
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

我在C ++標準(第8.5.8節)中發現了這一點:


一個其初始化程序是一組空括號(即())的對象,應進行值初始化。


[注意:由于初始化程序的語法不允許使用(),


X a ();

不是X類對象的聲明,而是不帶參數并返回X的函數的聲明。在某些其他初始化上下文(5.3.4、5.2.3、12.6.2)中允許使用()形式?!沧



查看完整回答
反對 回復 2019-12-16
  • 3 回答
  • 0 關注
  • 445 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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