c++11:std::declval、decltype
1、decltype是类型推导
#include <iostream>struct A { double x; };
const A* a;decltype(a->x) y; // y 的类型是 double(其声明类型)
decltype((a->x)) z = y; // z 的类型是 const double&(左值表达式)template<typename T, typename U>
auto add(T t, U u) -> decltype(t + u) // 返回类型依赖于模板形参
{ // C++14 开始可以推导返回类型return t+u;
}int main()
{int i = 33;decltype(i) j = i * 2;std::cout << "i = " << i << ", "<< "j = " << j << '\n';auto f = [](int a, int b) -> int{return a * b;};decltype(f) g = f; // lambda 的类型是独有且无名的i = f(2, 2);j = g(3, 3);std::cout << "i = " << i << ", "<< "j = " << j << '\n';
}
运行结果:
2、std::declval
inline T &&std::declval<T>()
将任意类型 T 转换成引用类型,令在 decltype 表达式中不必经过构造函数就能使用成员函数。
// declval example
#include <utility> // std::declval
#include <iostream> // std::coutstruct A { // abstract classvirtual int value() = 0;
};class B : public A { // class with specific constructorint val_;
public:B(int i,int j):val_(i*j){}int value() {return val_;}
};int main() {decltype(std::declval<A>().value()) a; // int adecltype(std::declval<B>().value()) b; // int bdecltype(B(0,0).value()) c; // same as above (known constructor)a = b = B(10,2).value();std::cout << a << '\n';return 0;
}
运行结果:
c++11:std::declval、decltype相关推荐
- c++11中的declval和decltype
一.declval的介绍 std::declval定义在头文件中: template<class T> typename std::add_rvalue_reference<T> ...
- python制作统计图_刻意练习11:Python描述统计、简单统计图形
学习计划 MyPlan11 主题:Python描述统计.简单统计图形 时间:8.5-8.11周内完成 参考资料:新书<谁说菜鸟不会数据分析python篇> 各位星友们,在这个星球里每个人都 ...
- c++11:std::chrono::time_point、time_t、std::localtime、std::gmtime、std::chrono::steady_clock
template<class Clock,class Duration = typename Clock::duration> class time_point; 类模板 std::chr ...
- C++11: std::function<void()> func
std::function介绍 类模版std::function是一种通用.多态的函数封装.std::function的实例可以对任何可以调用的目标实体进行存储.复制.和调用操作,这些目标实体包括普通 ...
- 拼多多11.11:无定金、不预售,“好牌子、好实惠”底价直降
一向主张"每天都是11.11"的新电商平台拼多多揭晓了今年的11.11玩法.11月5日,拼多多宣布,今年"11.11"平台加码百亿补贴力度,联合国内外一百余家旗 ...
- 【抓包工具】win 10 / win 11:WireShark 下载、安装、使用
目录 一.WireShark 下载 二.WireShark 安装 (1)双击运行安装程序 (2)Choose Components:选择组件 (3)Additional Tasks:附加任务 (4)C ...
- 2022/07/17、18 day10/11:Stream流、方法引用
文章目录 1. Stream流 1.1 引言 1.2 流式思想概述 1.3 获取流 1.4 常用方法 1.5 练习:集合元素处理(传统方式) 1.6 练习:集合元素处理(Stream方式) 2. 方法 ...
- 【Git】win 10 / win 11:git 下载、安装
目录 一.git 下载 二.git 安装 (1)继续之前,请阅读以下重要信息 (2)自定义选择安装位置 (3)选择组件 (4)创建开始菜单目录 (5)选择 Git 使用的默认编辑器 (6)调整新存储库 ...
- paste shell 分隔符_shell基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)
基本sort 最基本的s o r t方式为sort filename,按第一域进行分类(分类键0).实际上读文件时s o r t操作将行中各域进行比较,这里返回基于第一域s o r t的结果 [sam ...
最新文章
- PHP设计模式 外观模式(Facade)
- Android开发者指南(15) —— Managing Virtual Devices
- FreeMarker 自动转义和格式化HTML和XML输出,预防xss
- Linux Shell常用技巧(二)
- SAP Fiori:why my filter by titleID does not work
- NSA泄露的恶意软件DoublePulsar感染了数万台Windows电脑
- JMeter java.lang.OutOfMemoryError: PermGen space错误
- ORACLE P6 21.12 系统虚拟机(VM)分享
- vscode主题 webstorm_vscode/webstorm快捷键
- FTP升级cisco2811 IOS 实战
- 韩顺平 教学资料下载
- 【读书笔记】《M型社会》大前研一
- 软件设计模式Day01--简单的模拟鸭子应用
- iterative-mergesort
- Linux m4a转mp3
- 一个简洁的背单词、背短语python程序——英文背记系统(自用)
- currency.js -用于处理货币值的小型轻量级 JavaScript 库(也可以处理数值计算精度问题等)
- 管理经济学-使用Python和Z3求解本量利分析
- PostgreSQL隐藏列(兼容oracle)
- 阿里云ACP/ACE认证考试指南