C++11 auto和decltype关键字
时间:2020-04-01
本文章向大家介绍C++11 auto和decltype关键字,主要包括C++11 auto和decltype关键字使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天来看下C++中的auto和decltype两个关键字
- auto关键字定义变量,编译器会自动判断变量的类型
举个栗子:
auto i =100; // i 是 int
auto p = new A(); // p 是 A*
auto k = 34343LL; // k 是 long long
有时,变量的类型名特别长,使用 auto 就会很方便。例如:
map <string, int, greater <string> >mp;
for( auto i = mp.begin(); i != mp.end(); ++i)
cout << i -> first << ", " << i -> second;
编译器会自动识别出i的类型为map <string, int, greater
- decltype关键字可以用于求表达式的类型。
举个栗子
int i;
double t;
struct A { double x; };
const A* a = new A();
decltype(a) x1; //x1 是 A*
decltype(i) x2; //x2 是 int
decltype(a -> x) x3; // x3 是 double
编译器自动将decltype(a)等价于A*
auto和decltype可以一起使用
#include <iostream>
using namespace std;
struct A {
int i;
A(int ii) : i(ii) {}
};
A operator + (int n, const A & a)
{
return A(a.i + n);
}
template <class T1, class T2>
auto add(T1 x, T2 y) -> decltype(x + y) {
return x + y;
}
int main() {
auto d = add(100, 1.5); // d 是 double 类型,d = 101.5
auto k = add(100, A(1)); // k 是 A 类型,因为表达式“100+A(1)”是A类型的
cout << d << endl;
cout << k.i << endl;
return 0;
}
程序的输出结果如下:
101.5
101第 12 行告诉编译器,add 的返回值类型是decltype(x+y),即返回值的类型和x+y这个表达式的类型一致。编译器将 add 实例化时,会自动推断出x+y的类型。
- 在 C++11 中,函数返回值若为 auto,则需要和 decltype 配合使用。在 C++14 中,则可以不用 decltype,例如下面的程序没有问题:
auto add (int a, int b)
{
int i = a + b;
return i;
}
参考:http://c.biancheng.net/view/438.html
原文地址:https://www.cnblogs.com/whiteBear/p/12614925.html
- Robot Framework | 04 参数化基于Public API的RFS测试
- 接口测试 | 22 requests基础入门
- 分享一个Mvc的多层架构,欢迎大家拍砖斧正
- Robot Framework | 03 基于Public API创建你RFS测试
- Robot Framework | 02 从抛弃RIDE开始创建你的RFS测试
- ASP.NET5 Beta8可用性
- Docker Swarm集群初探
- 数据库逻辑设计
- 06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)
- [快学Python3]迭代器和生成器
- [快学Python3]INI文件读写
- Vijos P1131 最小公倍数和最大公约数问题【暴力】
- Vjios P1736 铺地毯【暴力,思维】
- Vijos P1116 一元三次方程求解【多解,暴力,二分】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 源码分析-分布式链路追踪:Skywalking存储插件能力-elasticsearch
- mongodb 4.0副本集搭建
- 浅析Kubernetes Pod重启策略和健康检查
- SpringBoot2 整合Ehcache组件,轻量级缓存管理
- 数据源管理 | 分布式NoSQL系统,Cassandra集群管理
- 【NPM库】- 0x03 - Express
- 数值微分|多项式的导数计算
- 让windows 10 内置ubuntu(WSL)成为扩增子分析生产力
- 手把手教你自定义Spring Boot Starter
- 高职考技能提升教程013期 冒泡排序法和选择排序法
- python带你剪辑视频
- python自制有声小说
- CVE-2017-8570及利用样本分析
- “既生 ExecutorService, 何生 CompletionService?”
- XXE -XML External Entity