[問題] decltype疑問

作者: WangDaMing (王大明)   2021-03-27 23:36:36
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
問題(Question):
#include <iostream>
int main()
{
int a;
int *ptr = &a;
int b[10] = {0};
int &d = a;
decltype(*ptr) c1 = a;//int &
decltype(b[0]) c2 = a;//int &
decltype(ptr) c3 = &a; //int *
}
最近再看decltype,書上說c1,c2都是"int &"
雖然這是結果,可是其實我還是不是很懂,為何c1,c2不是"int"
有人能更好的解釋為何c1,c2不應該是int??
還是就是規定沒什麼好說?
感謝各位
作者: nh60211as   2021-03-27 23:52:00
ptr的型別是int*,defrence之後變int&吧。b[0]同理錯字dereference
作者: jcaosola (紙袋)   2021-03-28 00:38:00
漲姿勢
作者: KanzakiHAria (神崎・H・アリア)   2021-03-28 12:13:00
如果你想要得到int的話用autodecltype特色就是能導出reference型態如果要強制指定成reference則用auto &推薦看modern effective c++
作者: g0010726 (Kevin)   2021-03-28 15:49:00
簡單說 decltype(var) 跟 decltype (expr) 規則不同詳細規則可以翻 cppreference你的前兩個例子是屬於 expression, 這個狀況下lvalue expression會產生reference第三個是 variable, 產生的type就是原本宣告的type

Links booklink

Contact Us: admin [ a t ] ucptt.com