我對值初始化的嘗試被解釋為函數(shù)聲明,為什么不是A a(()); 解決這個問題?經(jīng)典地用一條線來證明A a(B()); //declares a function雖然這對于大多數(shù)人而言,直觀地看起來是a類型對象的聲明A,將臨時B對象作為構(gòu)造函數(shù)參數(shù),它實際上是一個函數(shù)a返回的聲明A,將一個指針指向一個返回的函數(shù),它B本身不帶參數(shù)。同樣的線A a(); //declares a function也屬于同一類別,因為它代替一個對象,它聲明了一個函數(shù)?,F(xiàn)在,在第一種情況下,這個問題的通常解決方法是在其周圍添加一組額外的括號/括號B(),因為編譯器會將其解釋為對象的聲明A a((B())); //declares an object但是,在第二種情況下,執(zhí)行相同操作會導(dǎo)致編譯錯誤A a(()); //compile error我的問題是,為什么?是的我非常清楚正確的“解決方法”是將其更改為A a;,但我很想知道()第一個示例中的額外功能是什么,然后在重新應(yīng)用它時不起作用第二個例子。A a((B()));變通辦法是否是寫入標(biāo)準(zhǔn)的特定異常?
添加回答
舉報
0/150
提交
取消