函数模板
std::declval (c++11 only)
template<typename T>
typename add_rvalue_reference<T>::type declval() noexcept;
功能描述:
返回一个类型的右值引用,不管是否有没有默认构造函数或该类型不可以创建对象。(可以用于抽象基类);
参数:
无
返回值:
类型T的右值引用
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
// declval example
#include <utility> // std::declval
#include <iostream> // std::cout
struct
A {
// abstract class
virtual
int
value() = 0;
};
class
B :
public
A {
// class with specific constructor
int
val_;
public
:
B(
int
i,
int
j):val_(i*j){}
int
value() {
return
val_;}
};
int
main() {
decltype
(std::declval<A>().value()) a;
// int a
decltype
(std::declval<B>().value()) b;
// int b
decltype
(B(0,0).value()) c;
// same as above (known constructor)
a = b = B(10,2).value();
std::cout << a <<
'\n'
;
return
0;
}
|