C++11 新知识点
翻了下新版的C++ Primer,新的C++ 11真是变化很大,新增了很多语法特性。虽然已经很久没在写C++了,但一直对这门经典语言很感兴趣的,大致看了看前几章基础部分,总结下新特性备个忘吧。估计也很难有机会用上了... ╮(─▽─)╭
基本语法
类型别名
C++11新规定了一种使用using的别名声明的方法
typedef double wages;
using wages = double;
decltype类型指示符
通过decltype选安置并返回操作数的数据类型
//sum的类型是f()的返回值
decltype(f()) sum = x;
//错误示例, cj是z的一个引用, 必须初始化
const int &cj = ci;
decltype(cj) z;
变量名加上一层或多层括号时, 编译器会把它当成是一个表达式, 此时decltype会得到一个引用类型.
decltype((i)) d; //错误示例, d是int&, 必须初始化
迭代语句
for循环
for (declaration : expression)
statemet
例子:
//将vector对象中每个元素都翻倍
vector<int> v = {0, 1, 2, 3, 5}
for (auto &r : v)
r *= 2;
基本类型
string类型
string:: size_type
size_type是string中一种与机器无关的类型, 一个无符号类型的值而且能够存放下任何string对象的大小,所有用于存放string类的size函数返回值的变量, 都应该是string:: size_type类型的.
函数
可变形参函数
initializer_list
适用于全部类型都一样的可变形参, 定义在同名头文件中, 同vector一样, 也是种模板类型. 拷贝或赋值一个initializer_list对象不会拷贝列表中的元素, 拷贝后原始列表和副本共享元素
例子:
void error_msg(initializer_list<string> il)
{
for (auto beg = il.begin(); beg != il.end(); ++beg)
{
cout << *beg << " ";
cout << endl;
}
}
函数重载
const_cast强转重载函数
//比较两个string的长度, 返回较短的那一个
const string &shorterString(const string &s1, const string &s2)
{
return s1.size() <= s2.size() ? s1 : s2;
}
//使用const_cast改造成比较非常量时返回普通引用
string &shorterString(string &s1, string &s2)
{
auto &r = shorterString(const_cast<const string&>(s1),
const_cast<const string&>(s2));
return const_cast<string&>(r);
}
constexpr函数
能用于常量表达式的函数, 函数返回类型及所有形参类型都得是字面类型, 且函数体重有且只有一条return语句
constexpr int new_sz() { return 42; }
constexpr int foo = new_sz();
函数指针
typedef和decltype定义函数类型及指针
//Func和Func2是函数类型
typedef bool Func(const string&, const string&);
tyedef decltype(lengthCompare) Func2; //等价类型
//Func和Func2是指向函数的指针
typedef bool (*Func)(const string&, const string&);
typedef decltype(lengthCompare) *Func2; //等价类型
类
成员函数
- 定义在类内部的函数是隐式的inline函数
- 参数列表后加const, 用于修改隐式this指针类型, 便于指向常量, 限制this修改所指对象\
- C++11中可以通过在参数列表后面写上= default来要求编译器生成默认构造函数
- 通过mutable关键字来声明一个可变成员函数, 可在const成员函数中改变
- 通过explicit限制一个实参的构造函数进行隐式转换
委托构造函数
C++11中可使用委托构造函数来使用它所属类的其它构造函数来执行自己的初始化过程
class Sales_data {
Sales_data(std::string s, unsigned cnt, double price):
bookNo(s), units_sold(cnt), revenu(cnt*price) {}
Sales_data(): Sales_data("", 0, 0) {}
Sales_data(std::string s): Sales_data(s, 0, 0) {}
Sales_data(std::istream &is): Sales_data() {
read(is, *this)
}
}
C++11 新知识点的更多相关文章
- C++11新特性之0——移动语义、移动构造函数和右值引用
C++引用现在分为左值引用(能取得其地址)和 右值引用(不能取得其地址).其实很好理解,左值引用中的左值一般指的是出现在等号左边的值(带名称的变量,带*号的指针等一类的数据),程序能对这样的左值进行引 ...
- Python快速编程入门,打牢基础必须知道的11个知识点 !
Python被誉为全世界高效的编程语言,同时也被称作是“胶水语言”,那它为何能如此受欢迎,下面我们就来说说Python入门学习的必备11个知识点,也就是它为何能够如此受欢迎的原因. Python 简介 ...
- C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...
- C++11新特性总结 (二)
1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...
- C++11新特性总结 (一)
1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己写了,看别人写的代码估计都会有些吃力.C++ Primer5是学习C++1 ...
- C++ 11 新特性
C++11新特性: 1.auto 2.nullptr 3.for 4.lambda表达式 5.override ...
- [转载] C++11新特性
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...
- 在C++98基础上学习C++11新特性
自己一直用的是C++98规范来编程,对于C++11只闻其名却没用过其特性.近期因为工作的需要,需要掌握C++11的一些特性,所以查阅了一些C++11资料.因为自己有C++98的基础,所以从C++98过 ...
- c++11新标准for循环和lambda表达式
:first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...
随机推荐
- Java并发之线程管理(线程基础知识)
因为书中涵盖的知识点比较全,所以就以书中的目录来学习和记录.当然,学习书中知识的时候自己的思考和实践是最重要的.说到线程,脑子里大概知道是个什么东西,但很多东西都还是懵懵懂懂,这是最可怕的.所以想着细 ...
- Ansible(一) 配置安装
puppet ruby开发 salt python开发,有客户端,使用Rabbitmq消息队列,支持并发,在机器数量很多时效果比ansible好. ansible python开发, 没有客户端,基于 ...
- 【转】Java中用单例模式有什么好处
Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收( ...
- Grafana+Prometheus系统监控之SpringBoot
前言 前一段时间使用SpringBoot创建了一个webhook项目,由于近期项目中也使用了不少SpringBoot相关的项目,趁着周末,配置一下使用prometheus监控微服务Springboot ...
- 面向对象编程 —— java实现函数求导
文章目录 ★引子 ★求导 ★最初的想法 ★初步的想法 ★后来的想法 ★最后的想法 ★编程范式 ★结尾 首先声明一点,本文主要介绍的是面向对象(OO)的思想,顺便谈下函数式编程,而不是教你如何准确地.科 ...
- propertychange 不起作用
兼容性问题.将$("#systemLogSettings td[name='nMaxFileSize'] input").on("input propertychange ...
- ##6.2 Neutron计算节点-- openstack pike
##6.2 Neutron计算节点 openstack pike 安装 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html ##6.2 Neutron计算节 ...
- oracle触发器 调用 web接口
最近要求开发当数据表发生变化的时候调用web接口的需求,上网找了好几篇文章看着都觉得不是很好,也根据别人的思路去实现了下,感觉都不太理想,最后使用URLConnection实现了调用.具体查看一下代码 ...
- Jdk8的学习之lambda
在JDK8中,引入了Lambda(读:了母达)表达式的概念,这是我最喜欢的特性,很多东西都变得简单了,一行代码可以搞定. 比如说排序 /** * 这是一个JDK8的lambda的排序应用 */ pub ...
- UWP 五星好评
var pfn = Package.Current.Id.FamilyName; await Launcher.LaunchUriAsync(new Uri("ms-windows-stor ...