作者查詢 / g0010726
作者 g0010726 在 PTT [ C_and_CPP ] 看板的留言(推文), 共80則
限定看板:C_and_CPP
看板排序:
5F→: 第一個寫成 using bt = void (Testable::*)() const;06/09 01:09
6F→: 這樣有沒有比較好理解06/09 01:09
7F→: bt是個pointer to Testable裡的function06/09 01:10
8F→: 第二個是標準規定的, address of用在06/09 01:10
9F→: non-static member functions一定要qualified06/09 01:10
2F推: 陣列變數有 implicit conversion 轉換成06/07 23:49
3F→: 指向第一個element 的 pointer06/07 23:49
4F→: 於是 a 轉換成 &a[0] 恰好這個位置跟 &a 是同個地方 都06/07 23:51
5F→: a (int[5]) implicit converted to &a[0] (int*)06/07 23:53
6F→: &a ( int (*)[5] )06/07 23:53
8F→: 我猜原po可能在這裡把陣列跟pointer搞混了 一般宣告的06/08 00:43
9F→: pointer 裡面存的是指向物件的位址,但 a 裡面存的是06/08 00:43
10F→: int[5] 五個整數。主要還是前面提到的陣列implicit con06/08 00:43
11F→: version造成對於陣列跟pointer的混淆吧06/08 00:43
13F→: a這個變數指的是整個陣列 (int[5]) 不是你說的陣列開頭06/08 11:02
14F→: ,但因為存在implicit conversion, 所以當你在某些cont06/08 11:02
15F→: ext下寫a會轉成 &a[0] (int *),這個才指向陣列第一個e06/08 11:02
16F→: lement的位址, 然後這個位置址跟整個陣列的位址&a (int06/08 11:02
17F→: (*)[5]) 相同06/08 11:02
18F→: https://imgur.com/2w7VL9S06/08 11:19
8F推: 樓樓上說的關掉優化在c++17後應該也沒用了 有些rvo變成04/10 06:30
9F→: 強制的 規則可以在cppreference翻一下04/10 06:30
10F→: 抱歉 應該說 copy elision 比較準確04/10 06:31
8F推: 簡單說 decltype(var) 跟 decltype (expr) 規則不同03/28 15:49
9F→: 詳細規則可以翻 cppreference03/28 15:50
10F→: 你的前兩個例子是屬於 expression, 這個狀況下03/28 15:51
11F→: lvalue expression會產生reference03/28 15:51
12F→: 第三個是 variable, 產生的type就是原本宣告的type03/28 15:52
22F推: 1的話 C++17 變成illegal啦10/03 10:11
22F→: 一開始的code紅色行給你編譯過的話 你就可以做:10/01 08:20
23F→: const int cint; n = &cint;10/01 08:21
24F→: *b = 100; //改到cint惹 爆炸10/01 08:22
25F→: 也就是 想在type的某level加上const,得要一路往上每個10/01 08:27
26F→: level加const。 除了top level 可以不用管10/01 08:27
1F推: 所以是指一開始沒把實作include到main.cpp會error嗎?09/22 23:07
2F→: 這是因為編譯main.cpp的時候需要有template的實作,09/22 23:07
3F→: 用來產生Quaternion<float>這個class吧09/22 23:08
8F推: 你說的好像是這條standard, 我不是很確定08/16 00:05
9F→: http://goo.gl/kTSQDp08/16 00:05