翻了下新版的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 新知识点的更多相关文章

  1. C++11新特性之0——移动语义、移动构造函数和右值引用

    C++引用现在分为左值引用(能取得其地址)和 右值引用(不能取得其地址).其实很好理解,左值引用中的左值一般指的是出现在等号左边的值(带名称的变量,带*号的指针等一类的数据),程序能对这样的左值进行引 ...

  2. Python快速编程入门,打牢基础必须知道的11个知识点 !

    Python被誉为全世界高效的编程语言,同时也被称作是“胶水语言”,那它为何能如此受欢迎,下面我们就来说说Python入门学习的必备11个知识点,也就是它为何能够如此受欢迎的原因. Python 简介 ...

  3. C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)

    因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...

  4. C++11新特性总结 (二)

    1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...

  5. C++11新特性总结 (一)

    1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己写了,看别人写的代码估计都会有些吃力.C++ Primer5是学习C++1 ...

  6. C++ 11 新特性

    C++11新特性:          1.auto          2.nullptr          3.for          4.lambda表达式          5.override ...

  7. [转载] C++11新特性

    C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...

  8. 在C++98基础上学习C++11新特性

    自己一直用的是C++98规范来编程,对于C++11只闻其名却没用过其特性.近期因为工作的需要,需要掌握C++11的一些特性,所以查阅了一些C++11资料.因为自己有C++98的基础,所以从C++98过 ...

  9. c++11新标准for循环和lambda表达式

    :first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...

随机推荐

  1. mybatis简单搭建

    背景 闲来没事把mybatis再熟悉一下,可能之前自己搭过没有记录.mybatis其实就是一个orm框架,在我们之前做.net工作的时候,我们的ef,dapper等都是这样的框架,java现在web流 ...

  2. MS10_087漏洞学习研究

    类别:栈溢出,fileformat类别漏洞 描述: This module exploits a stack-based buffer overflow in the handling of the ...

  3. devdependencies与dependencies的区别

    一直在纠结devdependencies与dependencies的区别是什么,下面就对此作出详细介绍,希望对你有所帮助! 我们在使用npm install 安装模块或插件的时候,有两种命令把他们写入 ...

  4. file-loader 使用心得

    将webpack 里面的图片文件都放在制定文件夹. 配置如下 { test: /\.png$/, loader: "file-loader?name=imgs/[name]-[hash].[ ...

  5. Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)

    Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇--纯前端多页面) @(HTML/JS) 一般来说,使用vue做成单页应用比较好,但特殊情况下,需要使用多页面也有另外 ...

  6. C#的数据类型总结(2):decimal ,double,float的区别

    1> 三者是精度不同的浮点数,如下图 参见:https://docs.microsoft.com/zh-cn/dotnet/articles/csharp/language-reference/ ...

  7. NOI导刊2010提高装备运输

    www.luogu.org/problem/show?pid=1794 挺裸的一题背包,算很基础. 可以运用的技巧是三维->二维(节省空间还能少敲一点代码 #include<iostrea ...

  8. 将STM32 iap hex文件与app hex文件合并为一个hex文件

    日前公司产品需要增加远程升级功能,boot loader程序写好后交予生产部门使用时他们反馈每个产品程序需要刷写两次(一个boot loader 一个app程序),生产进度变慢浪费时间,于是乎研究如何 ...

  9. 一个模型中有两个外键指向同一张表时,创建迁移模型时报错:“ HINT: Add or change a related_name argument to the definition for 'AnswersModel.author' or 'AnswersModel.relay_to'.”解决方案

    class AnswersModel(models.Model): author = models.ForeignKey(FrontUserModel,null=True,related_name=' ...

  10. quzrtz的使用

    Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便. 一.核心概念 1.Job 表示一个工作,要执行的具体内容,此接口只有一个方法 void execute(JobExecuti ...