使用像typedef这样的decltype

时间:2018-05-02 09:37:57

标签: c++ c++11

在必要时尝试使用decltype代替typedefauto个关键字。其中一些(stl和用户函数)可以正常工作,但它不能直接与用户定义的对象一起工作。请在这里解释一下。

#include <iostream>
#include <vector>

using namespace std;

struct foo {
    void operator=(const int a ) { val_ =a;}
    int get() const { return val_;}
  private:
    int val_;
}; 

ostream& operator << (ostream& os, foo f )
{
    os << f.get();
    return os;
}

foo func()
{
    foo a;
    return a;
}

int main()
{
    vector<foo> foos;
    decltype(foos) b; //works

    decltype(foo);//  don't work  - says - error C3553: decltype expects an expression not a type

    decltype(func()) a; //works
    a = 100;

    std::cout << a << " \n";
}

EDITED

vector<foo> foos;
decltype(foos) b; //works :tested with vc++ compiler


decltype(vector<foo>) b; //fails

1 个答案:

答案 0 :(得分:1)

decltype等效于其对象操作数(或虚拟对象)的声明类型。所以你用一个对象提供它并在编译时获取类。由于结果是类型,因此您可以在期望typename的任何地方使用它。你不能用一种类型喂它。 https://en.cppreference.com/w/cpp/language/decltype