作者WangDaMing (王大明)
看板C_and_CPP
标题[问题] decltype疑问
时间Sat Mar 27 23:36:36 2021
开发平台(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??
还是就是规定没什麽好说?
感谢各位
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 39.11.98.99 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1616859398.A.A25.html
※ 编辑: WangDaMing (39.11.98.99 台湾), 03/27/2021 23:38:15
1F:→ nh60211as: ptr的型别是int*,defrence之後变int&吧。b[0]同理 03/27 23:52
2F:→ nh60211as: 错字dereference 03/27 23:53
3F:推 jcaosola: 涨姿势 03/28 00:38
4F:推 KanzakiHAria: 如果你想要得到int的话用auto 03/28 12:13
5F:→ KanzakiHAria: decltype特色就是能导出reference型态 03/28 12:13
6F:→ KanzakiHAria: 如果要强制指定成reference则用auto & 03/28 12:14
7F:→ KanzakiHAria: 推荐看modern effective c++ 03/28 12:14
8F:推 g0010726: 简单说 decltype(var) 跟 decltype (expr) 规则不同 03/28 15:49
9F:→ g0010726: 详细规则可以翻 cppreference 03/28 15:50
10F:→ g0010726: 你的前两个例子是属於 expression, 这个状况下 03/28 15:51
11F:→ g0010726: lvalue expression会产生reference 03/28 15:51
12F:→ g0010726: 第三个是 variable, 产生的type就是原本宣告的type 03/28 15:52