首页 > 试题广场 >

以上(1)(2)中变量b,c类型为()

[单选题]
int i=0;
const int ci=i;
auto b=ci; //(1)
int *p=&i;
decltype(*p) c=i;//(2)

以上(1)(2)中变量bc类型为()

  • const int ,int
  • int,int&
  • const int,int*
  • int,int*
(1)auto会忽略顶层const,所以b的类型为int
(2) 如果表达式的内容是解引用操作,则decltype将得到引用类型
发表于 2017-08-13 16:33:14 回复(5)
decltype和auto都可以用来推断类型,但是二者有几处明显的差异:
1.auto忽略顶层const,decltype保留顶层const;
2.对引用操作,auto推断出原有类型,decltype推断出引用;
3.对解引用操作,auto推断出原有类型,decltype推断出引用;
4.auto推断时会实际执行,decltype不会执行,只做分析。总之在使用中过程中和const、引用和指针结合时需要特别小心。
发表于 2019-06-06 21:44:56 回复(2)
decltype推导四规则 1.如果e是一个没有带括号的标记符表达式或者类成员访问表达式,那么的decltype(e)就是e所命名的实体的类型。此外,如果e是一个被重载的函数,则会导致编译错误。 2.否则 ,假设e的类型是T,如果e是一个将亡值,那么decltype(e)为T&& 3.否则,假设e的类型是T,如果e是一个左值,那么decltype(e)为T& 4.否则,假设e的类型是T,则decltype(e)为T 本题:decltype(*p)=i 符合规则3 *p不是一个标识符表达式,且是一个左值(可以取地址 ),(e)的类型是int,即T,所以推导类型为INT&
编辑于 2017-11-29 10:08:54 回复(0)
primer第五版63页原话:如果表达式的内容是解引操作,则decltype将得到引用类型。 另外要注意的是:若在表达式内的变量加了括号,则永远返回引用类型 int i=1;decltype((i)) c = i; c为 int &类型
发表于 2017-10-29 14:39:20 回复(1)

decltype和auto都可以用来推断类型,但是二者有几处明显的差异:

  1. auto忽略顶层const,decltype保留顶层const;

  2. 对引用操作,auto推断出原有类型,decltype推断出引用;

  3. 对解引用操作,auto推断出原有类型,decltype推断出引用;

  4. auto推断时会实际执行,decltype不会执行,只做分析。总之在使用中过程中和const、引用和指针结合时需要特别小心。

发表于 2020-03-18 11:33:29 回复(0)
//⑧auto不能自动推导成CV-qualifiers(constant & volatile qualifiers),除非被声明为引用类型 const int i = 99;  
auto j = i;       // j is int, rather than const int  
j = 100           // Fine. As j is not constant  

// Now let us try to have reference  
auto& k = i;      // Now k is const int&  
k = 100;          // Error. k is constant  

// Similarly with volatile qualifer 
转载自:http://blog.csdn.net/huang_xw/article/details/8760403

发表于 2017-08-13 13:24:03 回复(1)
auto忽略顶层const, decltype得到解引用操作。
编辑于 2017-08-15 09:58:52 回复(0)
(1)auto会忽略顶层const,所以b的类型为int
(2) 如果表达式的内容是解引用操作,则decltype将得到引用类型
##############
decltype推导四规则 1.如果e是一个没有带括号的标记符表达式或者类成员访问表达式,那么的decltype(e)就是e所命名的实体的类型。此外,如果e是一个被重载的函数,则会导致编译错误。 2.否则 ,假设e的类型是T,如果e是一个将亡值,那么decltype(e)为T&& 3.否则,假设e的类型是T,如果e是一个左值,那么decltype(e)为T& 4.否则,假设e的类型是T,则decltype(e)为T 本题:decltype(*p)=i 符合规则3 *p不是一个标识符表达式,且是一个左值(可以取地址 ),(e)的类型是int,即T,所以推导类型为INT&
发表于 2018-07-16 17:38:42 回复(0)
转走位崴了脚大佬:decltype和auto都可以用来推断类型,但是二者有几处明显的差异: 1.auto忽略顶层const,decltype保留顶层const; 2.对引用操作,auto推断出原有类型,decltype推断出引用; 3.对解引用操作,auto推断出原有类型,decltype推断出引用; 4.auto推断时会实际执行,decltype不会执行,只做分析。总之在使用中过程中和const、引用和指针结合时需要特别小心。
发表于 2023-08-14 07:51:01 回复(0)
decltype和auto都可以用来推断类型,但是二者有几处明显的差异:
1.auto忽略顶层const,decltype保留顶层const;
2.对引用操作,auto推断出原有类型,decltype推断出引用;
3.对解引用操作,auto推断出原有类型,decltype推断出引用;
4.auto推断时会实际执行,decltype不会执行,只做分析。总之在使用中过程中和const、引用和指针结合时需要特别小心。
发表于 2022-08-23 15:24:10 回复(0)
如果表达式的内容是解引用操作,则decltype将得到引用类型。
发表于 2021-10-27 00:13:25 回复(0)
如果想要得到const T,就这样使用——
const T t1; const auto t2=t1;
发表于 2018-08-30 15:58:08 回复(1)