美文网首页
[C++11阅读][3-3-4]decltype类型推导(下)

[C++11阅读][3-3-4]decltype类型推导(下)

作者: 凌霄阁2010 | 来源:发表于2020-10-28 18:36 被阅读0次

cv限制符

decltype可以带走cv限制符,这一点跟auto不同,auto带不走。
但cv限制符不会扩散到成员变量,也比较好理解。

#include <type_traits>
#include <iostream>
using namespace std;
const int ic = 0;
volatile int iv;
struct S { int i; };
const S a = {0};
volatile S b;
volatile S* p = &b;
int main() {
    cout << is_const<decltype(ic)>::value << endl;  // 1
    cout << is_volatile<decltype(iv)>::value << endl;  // 1
    cout << is_const<decltype(a)>::value << endl;  // 1
    cout << is_volatile<decltype(b)>::value << endl;  // 1
    cout << is_const<decltype(a.i)>::value << endl;  // 不会扩散到成员变量,0
    cout << is_volatile<decltype(p->i)>::value << endl;  // 不会扩散到成员变量,0
}

冗余符号

与auto一样,decltype后面可以跟着&和,多余的&不会变成右值引用,而是被吃掉,但多余的会累加上,变成指针的指针**,与auto不一样。

#include <type_traits>
#include <iostream>
using namespace std;
int i = 1;
int & j = i;
int * p = &i;
const int k = 1;
int main() {
    decltype(i) & var1 = i;  // int&
    decltype(j) & var2 = i;  // 也是int&,多余的一个&被吃掉
    cout << is_lvalue_reference<decltype(var1)>::value << endl;  // 1
    cout << is_rvalue_reference<decltype(var2)>::value << endl;  // 0
    cout << is_lvalue_reference<decltype(var2)>::value << endl;  // 1
    // decltype(p)* var3 = &i;  // compile err
    decltype(p)* var3 = &p;  // var3是int**
    auto* v3 = p;  // v3是int*,auto跟decltype不一样,会吃掉多余的*
    v3 = &i;
    const decltype(k) var4 = 1;  // 多余的const被吃掉,理所应当
}

相关文章

  • [C++11阅读][3-3-4]decltype类型推导(下)

    cv限制符 decltype可以带走cv限制符,这一点跟auto不同,auto带不走。但cv限制符不会扩散到成员变...

  • C++11的类型推导详解

    auto & decltype 关于C++11新特性,最先提到的肯定是类型推导,C++11引入了auto和decl...

  • C++11类型推导

    C++11 重新定义了auto 和 decltype 这两个关键字实现了类型推导,让编译器来操心变量的类型。 au...

  • C++11中auto和decltype

    C++11中auto和decltype auto和decltype都是C++11中引进来用于自动推断类型的关键字,...

  • 模板函数返回类型的演进

    提纲 c++03: trick 方法 c++11: auto->decltype 组合 c++14: 自动推导模板...

  • C++11 类型推导,auto和decltype

    本文根据众多互联网博客内容整理后形成,引用内容的版权归原始作者所有,仅限于学习研究使用,不得用于任何商业用途。 a...

  • decltype关键字

    C++11新标准学习:decltype关键字 1. decltype的意义 有时我们希望从表达式的类型推断出要定义...

  • [C++11阅读][3-3-3]decltype类型推导(中)

    引子 decltype类型推导还挺复杂,有时候会出一些奇怪的错误,比如下面的程序编译不过,因为括号里的i推导成引用...

  • [C++11阅读][3-3-2]decltype类型推导(上)

    表达式推导 如下面的例子,decltype的类型推导并不是像auto一样从变量声明的初始化获得变量类型,而是以一个...

  • nullptr

    decltype 用于类型推导,而 std::is_same 用于比较两个类型是否相同. 将输出: 结论 NULL...

网友评论

      本文标题:[C++11阅读][3-3-4]decltype类型推导(下)

      本文链接:https://www.haomeiwen.com/subject/dasqvktx.html