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

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

最煩人的解析

最煩人的解析

C++
湖上湖 2019-06-19 14:44:38
最煩人的解析我從這里.class Timer {  public:   Timer();};class TimeKeeper {  public:   TimeKeeper(const Timer& t);   int get_time()   {       return 1;   }};int main() {   TimeKeeper time_keeper(Timer());   return time_keeper.get_time();}從它的外觀來看,它應該會得到編譯錯誤,原因是行:TimeKeeper time_keeper(Timer());但只有當return time_keeper.get_time();是存在的。為什么這一行甚至重要,編譯器會發現歧義time_keeper(Timer() )建筑。
查看完整描述

2 回答

?
心有法竹

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

這是因為TimeKeeper time_keeper(Timer());被解釋為函數聲明,而不是變量定義。這本身并不是一個錯誤,但是當您試圖訪問get_time()時間守護者(這是一個函數,而不是計時器實例)的成員,您的編譯器會失敗。

編譯器就是這樣看待代碼的:

int main() {
  // time_keeper gets interpreted as a function declaration with a function argument.
  // This is definitely *not* what we expect, but from the compiler POV it's okay.
  TimeKeeper time_keeper(Timer (*unnamed_fn_arg)());

  // Compiler complains: time_keeper is function, how on earth do you expect me to call
  // one of its members? It doesn't have member functions!
  return time_keeper.get_time();}


查看完整回答
反對 回復 2019-06-19
?
搖曳的薔薇

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

雖然我知道標準在第13.1/3節中說,在這種情況下,定時器函數類型會被調整成為函數類型的指針,但是為什么有人希望從一開始就對其進行調整呢?在我看來,第13.1/3節造成了整個“最令人煩惱的解析”問題?

查看完整回答
反對 回復 2019-06-19
  • 2 回答
  • 0 關注
  • 455 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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