摘要:
C++ 智能指针面试点 1. C++智能指针有哪些? C++主要有三种智能指针(位于头文件memory中) std::unique_ptr 不能被复制,只能移动(std::move)。 适用于独占资源管理(如文件、网络连接)。 用std::make_unique创建(C++14) std::shar 阅读全文
摘要:
多态:同一操作作用于不同对象时,产生不同的行为,分为编译时多态和运行时多态 1.运行时多态(动态绑定) 1.虚函数 通过虚函数和基类指针/引用实现,具体调用那个函数在运行时决定。 class Shape { public: Shape() {} virtual ~Shape() {} virtual 阅读全文
摘要:
一、C++异常基础 1.异常处理机制 C++异常通过throw抛出异常对象,try/catch捕获处理: #include <iostream> #include <exception> using namespace std; int division(int dividend, int divi 阅读全文
摘要:
1 什么是函数对象 1.1 函数对象 函数对象是任何可以被当做函数来使用的对象。 class Adder { Adder(int n) : n_(n) {} int operator()(int x) const { return x + n_; } private: int n_; }; 上述定义 阅读全文
摘要:
1.引用语义和值语义 C++同时支持引用语义(reference semantics)和值语义(value semantics),并默认使用值语义。 1.1 定义 值语义:指对象在赋值或传递时,进行的是值得复制,每个对象都有自己独立的数据副本,赋值过后,操作源对象和目的对象互不影响。 引用语义:指对 阅读全文
摘要:
在C++中,翻译单元(Translation Unit)是编译器处理的基本单位,它由一下内容组成: 1.翻译单元的定义 翻译单元=一个源文件(.cpp)+所有它直接或间接包含的头文件(.h)。 预处理后的结果:在编译开始前,预处理器会将所有#include指令替换为对应头文件的内容,展开宏,处理条件 阅读全文
摘要:
引用和指针有两个重要的语义区别: 对指针赋值是修改指针的指向,不会影响当前指正指向的对象;对引用赋值是直接修改引用所指向的对象,即在S& r = s后再执行r = ...跟执行s = ...是没有区别的。 指针可以为空(初始化为NULL或nullptr),但是引用不允许为空,必须在初始化时立即绑定到 阅读全文
摘要:
背景知识 在C++中,左值(lvalue)和右值(rvalue)是表达式的核心值类别(value categories),决定了对象的生命周期、操作权限和资源管理方式。理解左右值之间的区别是掌握移动语义(Move Semantics)、完美转发(Perfect Forwarding)的关键。 注意点 阅读全文
摘要:
1.override关键字 作用 显式标记派生类中的函数是覆盖基类的虚函数。编译器会检查签名是否与基类虚函数一直,避免因签名不一致导致意外行为。 使用场景 在派生类中重写基类虚函数时,显式声明覆盖关系。 防止因函数名拼写错误、参数类型不匹配或者常两性(const)不一致导致的错误覆盖。 语法规则 只 阅读全文
摘要:
在C++11中,就地初始化(In-class member initializers)允许类的定义中直接为成员变量富裕初始值。这一特性简化了代码,减少了构造函数中的重复初始化逻辑,同时提高了代码的可维护性。以下是其核心规则和用法详解: 1.基本语法 在类定义中,直接为成员变量富裕初始值: class 阅读全文