c++11 std::declval 详解

函数模板

std::declval (c++11 only)


template<typename T>

  typename add_rvalue_reference<T>::type declval() noexcept;

功能描述:

 返回一个类型的右值引用,不管是否有没有默认构造函数或该类型不可以创建对象。(可以用于抽象基类);

参数:

返回值:

类型T的右值引用

例子:

// 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;
}

  

原文链接: https://www.cnblogs.com/chengyuanchun/p/5023296.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++11 std::declval 详解

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/225433

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午12:48
下一篇 2023年2月13日 下午12:48

相关推荐