[问题] 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