最近尝试学习decltype和declval,记录一下学习内容
1.decltype是C++11出现的新关键字,在vc中打出来有着高贵的亮蓝色,是用来形容decltype(表达式)中,表达式的类型的。
简单的
int a = 10;
decltype(a) b;
此时b被声明为与a同样的类型,也就是int。
2.declval并不是关键字,只是标准库中的一员,实际上用的时候要用std::declval来使用。而且经常和decltype一起使用来解决decltype的不足,在c++标准文档中给的列子如下:
#include <utility>
#include <iostream>
struct Default { int foo() const { return 1; } };
struct NonDefault
{
NonDefault() = delete;
int foo() const { return 1; }
};
int main()
{
decltype(Default().foo()) n1 = 1; // n1 的类型是 int
// decltype(NonDefault().foo()) n2 = n1; // 错误:无默认构造函数
decltype(std::declval<NonDefault>().foo()) n2 = n1; // n2 的类型是 int
std::cout << "n1 = " << n1 << '\n'