经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++11新特性(二):语言特性
来源:cnblogs  作者:LemHou  时间:2024/8/26 9:18:47  对本文有异议

C++11新特性

语言特性

nullptr空指针

nullptr空指针的使用可以规避掉以往设置为NULL的风险。NULL在编译器中常常被设置为0或者其它数字,此时判断指针是否为NULL,即判断指针类型是否能够等于整型值,并不安全。

  1. int *p = nullptr;

强类型枚举

强类型枚举不能隐式转换为int类型,可以指定底层类型,如果未指定底层类型,会自动默认为int类型。只能通过类型名访问,是因为成员作用域局限在类型中,并不公开。

  1. // 强类型枚举
  2. enum class HttpStateuint32_t{
  3. HTTP_OK, // private
  4. HTTP_BAD
  5. };
  6. using State = HttpState;
  7. State state = State::HTTP_OK;

constexpr声明

constexpr会告诉编译器在编译时对其进行优化,所以会在编译时即计算完。因此禁止调用函数(发生在运行时)。

  1. constexpr int Add(int a, int b)
  2. {
  3. return a + b;
  4. }
  5. int main(){
  6. int a =3, b = 4;
  7. const int res = Add(a, b);
  8. std::cout << res << std::endl;
  9. }

属性

[[noreturn]]属性指明,函数不返回值。

委托构造

构造器能够调用其它构造器进行初始化。

  1. class MyClass{
  2. MyClass(int a) val(a){}; // default private
  3. MyClass() : MyClass(0){};
  4. private:
  5. int val;
  6. }

用户定义语义

这个暂时没有理解

显式虚重载

override告知编译器,派生类会覆盖基类中的虚函数,避免发生签名不匹配和不存在相应虚函数。如果出错会报错。

  1. // explict virtual override
  2. class Base{
  3. virtual void Add()=0;
  4. };
  5. class Derived final: public Base{
  6. void Add() override{
  7. };
  8. };

Final限定符:限定的东西无法继承

告诉编译器,用于指示一个类不能被进一步继承,或者一个虚函数不能被子类覆盖。

  1. // final修饰的虚函数无法覆盖
  2. class Cat{
  3. public:
  4. virtual void showCatName() final{ // 限定不能被继承
  5. /* 显示名字 */
  6. }
  7. };
  8. class MyCat : public Cat{
  9. void showCatName(){ // 不能继承父类,此时会编译报错
  10. /* ... */
  11. }
  12. }
  13. // final修饰的类无法继承
  14. class Base final{
  15. virtual void Add() = 0;
  16. };

default函数

此修饰符用于告诉编译器为default修饰的函数生成默认函数, noexcept告诉编译器不要抛出异常,避免对象构建过程中抛出异常,假如构造函数抛出异常,其中有一些变量已经生成。那么此时对象无法构建成功,已经生成的变量则无法析构,会导致丢失内存。

  1. class Myclass{
  2. Myclass() noexcept = default; // 生成默认配置
  3. };

deleted函数

此修饰符用于告诉编译器不要为delete生成默认的函数,使其无法被实例化和调用。可以完成禁止拷贝、禁止移动等功能。

  1. class Myclass{
  2. Myclass() noexcept = delete; // 生成默认配置
  3. };

原文链接:https://www.cnblogs.com/solicit/p/18377416

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号