没有任何变量类型的decltype

时间:2018-03-26 14:03:19

标签: c++ c++11

我对C ++中的decltype用法不太熟悉。但是下面是我最终为项目目的而来的代码:

#include <iostream>
#include <inttypes.h>

#define SA(obj) ((obj)->u)

struct A
{
    A()
    {
    std::cout << "Called" << std::flush << std::endl;
    }
    uint32_t u;
};

int main()
{
    struct A a2;
    decltype(A().u) p;
    a2.u = 99;
    p = a2.u;
    if(a2.u != SA(&a2) )
    std::cout << "Not Same" << std::flush << std::endl;
    else
    std::cout << "Same" << std::flush << std::endl;
}

我可以看到A的构造函数只被调用一次,因为下面的语句:

struct A a2;

同样关注decltype中的构造意味着什么 - 它不会创建结构的临时实例 -

decltype(A().u) p;

如下面的声明给出了编译错误:

decltype(A.u) p;

c++ -std=c++11 try5.cpp

try5.cpp: In function 'int main()':
try5.cpp:18:17: error: invalid type in declaration before ';' token
  decltype(A.u) p;

1 个答案:

答案 0 :(得分:0)

decltype括号内的表达式未评估。它只是由编译器分析以发现它的类型,但从未转换为实际的可执行代码。

A.u在分析阶段失败,因为您无法在类型名称后使用.