[問題] sizeof 測量暫時物件遇到的問題

看板C_and_CPP作者 (小乖)時間15年前 (2010/12/06 12:53), 編輯推噓4(4011)
留言15則, 6人參與, 最新討論串1/1
考慮下列程式 void test_sizeof() { struct A{}; sizeof(A()); } //in VC 2008 & 2010 //error C2066: cast to function type is illegal //in GCC 4.5 //warning: invalid application of 'sizeof' to a function type 由錯誤訊息來看,compiler 把 sizeof(A()) 當成 function type 於是我改寫這樣的 code void test_sizeof() { struct A(){ public: A(int a=0){} }; sizeof(A(0)); } compiler 可以順利通過。 我在網路上找了一些資料,有個 hack 方式可以讓第一種方式順利編過 http://erdani.com/errata/display.html?book_index=1&printing=13&book_name=Modern%20C++%20Design void test_sizeof() { struct A{}; sizeof((A())); // 多加括號 } 我的問題是,為什麼多加了這一對括號就可以讓 VC compiler Happy 呢 XD 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.96.34

12/06 12:59, , 1F
我前幾天念 Modern C++ Design 才遇到一模一樣的問題= =
12/06 12:59, 1F

12/06 13:00, , 2F
struct A(){} 這是啥寫法?而且也編不過
12/06 13:00, 2F
※ 編輯: spider391 來自: 220.134.96.34 (12/06 13:40)

12/06 13:40, , 3F
已經更正為 struct A{}; 謝謝
12/06 13:40, 3F

12/06 15:22, , 4F
這道理就跟你寫 A x(); 這樣 x 會被當成 function
12/06 15:22, 4F

12/06 15:23, , 5F
在要放type的地方寫A()會被當成是回傳A的function
12/06 15:23, 5F

12/06 15:24, , 6F
但多加括號後compiler把它視為一個expression
12/06 15:24, 6F

12/06 15:25, , 7F
因此會把 A() 當成是建構 A 的 ctor
12/06 15:25, 7F

12/06 17:23, , 8F
不用讀 Modern C++ Design 就遇得到這問題了阿 :) 像
12/06 17:23, 8F

12/06 17:24, , 9F
是 std::vector 的傳入兩個迭代器版本的建構子, 也會
12/06 17:24, 9F

12/06 17:24, , 10F
讓編譯器以為是函式宣告
12/06 17:24, 10F

12/06 17:44, , 11F
謝謝說明^^
12/06 17:44, 11F

12/07 01:07, , 12F
我記得primer上的例子就是love大的那個XD
12/07 01:07, 12F

12/07 01:08, , 13F
還是more effective? 有點忘了...
12/07 01:08, 13F

12/07 14:37, , 14F
建構子的案例,在 Effective STL 很前面的 Item。
12/07 14:37, 14F

12/07 14:38, , 15F
Item 6,PDF 檔直接 Google 書名就有了。
12/07 14:38, 15F
文章代碼(AID): #1C_6mtYR (C_and_CPP)