文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——第3章 通用为本,专用为末 3.1 继承构造函数

第 3 章 通用为本,专用为末 C++11的设计者总是希望从各种方案中抽象出更为通用的方法来构建新的特性。这意味着C++11中的新特性往往具有广泛的可用性,可以与其他已有的,或者新增的语言特性结合起来进行自由的组合,或者提升已有特性的通用性。这与在语言缺陷上“打补丁”的做法有着本质的不同,但也在一定程度上拖慢了C++11标准的制定。不过现在一切都已经尘埃落定了。在本章里读者可以看到这些经过反...

文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——2.14 本章小结

2.14 本章小结 在本章中,我们可以看到C++11大大小小共17处改动。这17处改动,主要都是为保持C++的稳定性以及兼容性而增加的。 比如为了兼容C99,C++11引入了4个C99的预定的宏、__func__预定义标识符、_Pragma操作符、变长参数定义,以及宽窄字符连接等概念。这些都是错过了C++98标准,却进入了C99的一些标准,为了最大程度地兼容C,C++将这些特性全都纳入C++11....

文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——2.13 局部和匿名类型作模板实参

2.13 局部和匿名类型作模板实参 类别:部分人 在C++98中,标准对模板实参的类型还有一些限制。具体地讲,局部的类型和匿名的类型在C++98中都不能做模板类的实参。比如,如代码清单2-30所示的代码在C++98中很多都无法编译通过。 在代码清单2-30中,我们定义了一个模板类X和一个模板函数TempFun,然后分别用普通的全局结构体、匿名的全局结构体,以及局部的结构体作为参数传给模板。可以.....

文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——2.12 外部模板

2.12 外部模板 类别:部分人 2.12.1 为什么需要外部模板 “外部模板”是C++11中一个关于模板性能上的改进。实际上,“外部”(extern)这个概念早在C的时候已经就有了。通常情况下,我们在一个文件中a.c中定义了一个变量int i,而在另外一个文件b.c中想使用它,这个时候我们就会在没有定义变量i的b.c文件中做一个外部变量的声明。比如: extern int i; 这样做的好处是....

文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——2.11 模板函数的默认模板参数

2.11 模板函数的默认模板参数 类别:所有人 在C++11中模板和函数一样,可以有默认的参数。这就带来了一定的复杂性。我可以通过代码清单2-26所示的这个简单的模板函数的例子来回顾一下函数模板的定义。 在代码清单2-26中,当编译器解析到函数调用fun(1)的时候,发现fun是一个函数模板。这时候编译器就会根据实参1的类型const int推导实例化出模板函数void TempFun(int.....

文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——2.10 final/override控制

2.10 final/override控制 类别:部分人 在了解C++11中的final/override关键字之前,我们先回顾一下C++关于重载的概念。简单地说,一个类A中声明的虚函数fun在其派生类B中再次被定义,且B中的函数fun跟A中fun的原型一样(函数名、参数列表等一样),那么我们就称B重载(overload)了A的fun函数。对于任何B类型的变量,调用成员函数fun都是调用了B重载....

文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——2.9 扩展的friend语法

2.9 扩展的friend语法 类别:部分人 friend关键字在C++中是一个比较特别的存在。因为我们常常会发现,一些面向对象程序语言,比如Java,就没有定义friend关键字。friend关键字用于声明类的友元,友元可以无视类中成员的属性。无论成员是public、protected或是private的,友元类或友元函数都可以访问,这就完全破坏了面向对象编程中封装性的概念。因此,使用frie....

文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——2.8 非静态成员的sizeof

2.8 非静态成员的sizeof 类别:部分人 从C语言被发明开始,sizeof就是一个运算符,也是C语言中除了加减乘除以外为数不多的特殊运算符之一。而在C++引入类(class)类型之后,sizeof的定义也随之进行了拓展。不过在C++98标准中,对非静态成员变量使用sizeof是不能够通过编译的。我们可以看看下面的例子,如代码清单2-18所示。 注意最后一个sizeof操作。在C++11中.....

文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——2.7 快速初始化成员变量

2.7 快速初始化成员变量 类别:部分人 在C++98中,支持了在类声明中使用等号“=”加初始值的方式,来初始化类中静态成员常量。这种声明方式我们也称之为“就地”声明。就地声明在代码编写时非常便利,不过C++98对类中就地声明的要求却非常高。如果静态成员不满足常量性,则不可以就地声明,而且即使常量的静态成员也只能是整型或者枚举型才能就地初始化。而非静态成员变量的初始化则必须在构造函数中进行。我们....

文章 2017-08-01 来自:开发者社区

《深入理解C++11:C++ 11新特性解析与应用》——2.6 noexcept修饰符与noexcept操作符

2.6 noexcept修饰符与noexcept操作符 类别:库作者 相比于断言适用于排除逻辑上不可能存在的状态,异常通常是用于逻辑上可能发生的错误。在C++98中,我们看到了一套完整的不同于C的异常处理系统。通过这套异常处理系统,C++拥有了远比C强大的异常处理功能。 在异常处理的代码中,程序员有可能看到过如下的异常声明表达形式: void excpt_func() throw(int, do....

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

开发与运维

集结各类场景实战经验,助你开发运维畅行无忧

+关注