C++ const /noexcept/override/final/delete一口吃透
一、const 关键字成员函数版1. 语法返回值 函数名(参数) const { ... }2. 核心作用const 修饰成员函数承诺本函数不会修改类的普通成员变量。3. 硬性规则const 成员函数不能修改普通成员变量const 成员函数不能调用非 const 成员函数const 对象 只能调用 const 成员函数普通对象可以调用 const 成员函数void f();和void f() const;构成函数重载4. 示例class Test { int x; public: void set(int v) { x v; } // 可修改 int get() const { return x; } // 只读不能改x };5. 常成员变量const int a 10;必须初始化之后不能修改。二、override 关键字1. 语法只能用在派生类的虚函数末尾virtual void fun() override;2. 核心作用显式告诉编译器这个函数是用来重写父类的虚函数请严格检查格式是否一致。3. 检查哪些东西编译器强制校验函数名必须一样参数列表必须一样返回值兼容const 修饰必须一致虚函数属性匹配4. 为什么要用不加 override你写错参数 / 漏写 const → 编译器不报错不会重写变成隐藏多态直接失效运行时 bug加 override只要和父类虚函数对不上直接编译报错提前排错示例class Base { public: virtual void show() const {} }; class Deri : public Base { public: // 正确完全匹配 void show() const override {} // 错误少了constoverride直接报错 // void show() override; };三、final 关键字两种用法用法 1修饰虚成员函数作用禁止子类继续重写这个虚函数class Base { public: virtual void f() final {} }; class Son : public Base { public: // 编译报错f是final不能重写 // void f() override; };用法 2修饰类作用禁止这个类被继承class A final { }; // 编译报错不能继承final类 // class B : public A { };总结口诀final 函数不许再重写final 类不许再继承四、noexcept 关键字1. 语法void fun() noexcept;2. 核心作用给编译器承诺这个函数绝对不会抛出异常。3. 好处编译器可以做更好优化STL 容器vector会优先选择 noexcept 的移动构造 / 移动赋值提升性能代码语义清晰一眼看出不会抛异常4. 违规后果如果标了 noexcept内部却强行throw程序直接调用std::terminate强制终止。5. 常用场景移动构造函数移动赋值运算符简单只读工具函数const 成员函数常搭配 noexcept示例int getVal() const noexcept { return x; }五、delete 关键字 禁用函数1. 语法函数声明 delete;2. 核心作用把某个函数直接 “删掉”禁止任何人调用调用就编译报错。3 大常用场景场景 1禁用编译器默认生成的函数默认函数包括默认构造拷贝构造赋值重载析构函数class Person { public: // 禁用默认构造 Person() delete; // 禁用拷贝构造 Person(const Person) delete; // 禁用赋值 Person operator(const Person) delete; };场景 2禁用函数重载版本void func(int); // 禁止传double void func(double) delete;场景 3禁止隐式类型转换struct A { // 禁止用int构造禁止隐式转换 A(int) delete; };4. 特点编译期禁止运行时无隐患比 private 禁用更干净、更规范六、五个关键字组合标准写法工程 / 考试标配class Base { public: // 虚函数 const noexcept virtual void show() const noexcept 0; }; class Son : public Base { public: // 重写 校验override 只读const 不抛异常noexcept 禁止后代再重写final void show() const noexcept override final; };七、终极一句话背诵期末必考const成员函数只读不修改成员变量const 对象只能调用 const 函数。override派生类显式重写虚函数编译器强制签名校验防止多态出错。final修饰虚函数禁止重写修饰类禁止继承。noexcept承诺函数不抛异常利于编译优化和 STL 性能提升。delete禁用指定函数禁止调用、禁止默认函数、禁止隐式转换。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2579447.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!