
C++11
文章平均质量分 58
C++11 是第二个真正意义上的 C++ 标准,也是 C++ 的一次重大升级。2011年9月份提出来的C++11标准,现在都2021年了,你还不学吗?你还不用吗?
困了就喝白茶
街边太多人与车,繁华闹市人醉夜
展开
-
C++11新关键字noexcept、override、final把我们的心意告诉编译器
noexcept告诉编译器不抛异常异常时一定要处理的,如果一个函数出现异常,它内部不对该异常做处理,异常会一直往上传递,给函数的调用者。到最后一直没有被处理,程序就会终止,调用std::terminate(),它默认调用std::abort()。void foo()noexcept;void foo()noexcept(true);//和上面等价,告诉编译器这个函数不要抛出异常当然了你可以指定函数不抛出异常的条件,例如void swap(Type& x, Type& y)noex原创 2021-05-27 22:51:38 · 1891 阅读 · 2 评论 -
C++11新特性从using化名模板到模板模板参数
新特性化名模板template <typename T>using Vec = std::vector<T,MyAlloc<T>>; //其中MyAlloc是自定义的迭代器。//然后以后声明变量就这样写Vec<int> coll;//下面的写法等价于上一面的std::vector<int,MyAlloc<int>> coll;平时我们声明一个vector是这样的vector<int> vec;//没有特意原创 2021-05-27 22:13:59 · 320 阅读 · 0 评论 -
C++11新特性 =default 与 =delete,看完你就会懂,会用了
简述 =default和=deleteC++11加入了=default与=delete两个关键字,它们只作用于big five(默认构造、拷贝构造、赋值构造、析构函数和带&&的赋值与拷贝构造)不带&&的前面一些叫big three。单纯从英文翻译为中文来说,default是默认的意思,delete是删除的意思。在这里也是大概这样的意思。=default是保留默认的big five,=delete是删除默认的big five。写空的类不是空的什么时候空的类不再是空的呢,当原创 2021-05-25 23:43:22 · 2826 阅读 · 10 评论 -
C++11for循环的一种特殊写法
C++1.0的for循环写法是这样的:#include <iostream>using namespace std;int main(){ int n[10]{1,2,3,4,6,8,9,0}; //后面几位会用0补充 for(int i = 0; i < 10; i++) { cout<<n[i]<<endl; }}C++2.0(C++11)新版的for循环是这样的:#include <i原创 2021-05-24 22:49:02 · 471 阅读 · 2 评论 -
c++11对构造函数多过一个参数用explicit
explicit这个关键字在C++1.0(C++11之前)就已经有了。但C++11提出, explicit for actors taking more than one argument。例子1:(这个例子不太符合explicit)#include <iostream>using namespace std;class P{public: P(int a, int b) { cout << "P(int a, int b)" <原创 2021-05-24 22:05:17 · 738 阅读 · 1 评论 -
C++11新特性统一初始化
为什么提出统一初始化?在C++11之前,程序员,尤其是新手,很容易被如何初始化变量或对象的问题弄糊涂。初始化可以使用圆括号、大括号和赋值操作符(=)。因此,C++11引入了统一初始化的概念,这意味着对于任何初始化,你都可以使用一种通用语法。这个语法使用了大括号。举一些统一初始化的例子#include <iostream>#include <vector>#include <string>#include <complex>using names原创 2021-05-23 21:27:56 · 523 阅读 · 12 评论 -
C++11新特性nullptr与std::nullptr_t
C++11允许使用nullptr代替0或NULL来指定指针不指向任何指(这与拥有未定义的值不同)。这个新特性特别有助于避免将空指针解释为整数值发生的错误。例如:void f(int);void f(void*);f(0); //calls f(int)f(NULL); //calls f(int) if NULL is 0 容易产生歧义int *p = NULL; //NULL本质上就为0f(p);//calls f(void)f(nullptr); //calls f(void原创 2021-05-23 15:39:21 · 2077 阅读 · 1 评论 -
C++11新特性数量不定的模板参数
什么叫数量不定的模板参数呢?请看下面的例子#include <iostream>using namespace std;void print()//递归的出口{ //空实现}template<typename T, typename... Types>void print(const T& firstArg, const Types&... args){ cout << firstArg << endl; prin原创 2021-05-23 14:26:24 · 1509 阅读 · 0 评论 -
可能编译器默认不使用C++11的特性,VS设置使用C++11的特性的方法
检查自己的IDE是否支持C++11 cout << __cplusplus << endl;支持C++11是输入结果是>=201103L这个是在Microsoft截的图VisualStudio2017下配置支持C++11特性的做法右键项目属性,选择C++11后的版本就行了,我这里选择了17。然后在这里加入一句话/Zc:__cplusplus再输出__cplusplus=201703L到此为止,编译器就支持了C++11的新特性了,其他IED也需要类似的配置原创 2021-05-23 13:13:44 · 4528 阅读 · 0 评论 -
C++11返回值类型后置
为什么需要C++11的新特性,返回值类型后置呢?返回值类型后置语法,是为了解决函数返回值类型依赖于参数而导致难以确定返回值类型的问题。有了这种语法以后,对返回值类型的推导就可以用清晰的方式(直接通过参数做运算)描述出来,而不需要像 C++98/03 那样使用晦涩难懂的写法。在泛型编程中,我们可能会遇到,通过参数运算得到的返回值如下面的例子。在此之前,我当你了解了auto与decltype,不了解可以看看我以前的博客。例子如下:#include <iostream>#include &原创 2021-05-22 22:46:47 · 557 阅读 · 0 评论 -
C++11类型推导的关键字auto和decltype
他们的语法格式:auto varname = value; decltype(exp) varname [= value]; 稍微解释一下,看不懂没关系,耐心往下看你就会明白了:varname 表示变量名,value 表示赋给变量的值,exp 表示一个表达式,方括号[ ]表示可有可无。auto 和 decltype 都会自动推导出变量 varname 的类型,但是他们都推导方式有些区别:auto 根据=右边的初始值 value 推导出变量的类型;所以auto要求变量必须初始化,也就是在原创 2021-05-21 16:25:50 · 561 阅读 · 13 评论 -
C++11特性之auto关键字
什么是C++11简单的来说就是2011指定的C++标准。该标准在 C++ 98 的基础上修正了约 600 个 C++ 语言中存在的缺陷,同时添加了约 140 个新特性,这些更新使得 C++ 语言焕然一新。C++ auto类型推导C++11赋予auto关键字新的含义,使用它可以编译器在编译期间自动推导出变量的类型。auto关键的基本语法如下auto name = value;name是变量名,value是它初始化的值。来一个auto简单的例子:#include <iostream>原创 2021-03-27 17:27:45 · 461 阅读 · 0 评论