在必要时尝试使用decltype
代替typedef
或auto
个关键字。其中一些(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
答案 0 :(得分:1)
decltype
等效于其对象操作数(或虚拟对象)的声明类型。所以你用一个对象提供它并在编译时获取类。由于结果是类型,因此您可以在期望typename
的任何地方使用它。你不能用一种类型喂它。
https://en.cppreference.com/w/cpp/language/decltype