首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++相关基础知识总结笔记

引用的本质在c++内部实现是一个常量指针....(无参,函数体为空) 3.默认拷贝构造函数, 对类中非静态成员属性简单值拷贝 如果用户定义拷贝构造函数,c++不会再提供任何默认构造函数 如果用户定义了普通构造(非拷贝),c++不在提供默认无参构造...拷贝构造函数:用于创建一个新对象作为现有对象的副本。拷贝构造函数接受一个同类型对象的引用作为参数。 移动构造函数:用于创建一个新对象作为另一个对象的移动(move)。...移动构造函数接受一个同类型对象的右值引用作为参数。 构造函数的调用顺序 当一个类继承自另一个类时,基类的构造函数会在派生类的构造函数之前被调用。...因此,引用成员变量必须在构造函数的初始化列表中初始化。

21330

什么?CC++面试过不了?因为你还没看过这个!

const 的指针与引用 指针 指向常量的指针(pointer to const) 自身是常量的指针(常量指针,const pointer) 引用 指向常量的引用(reference to const)...有些场合必须要用初始化列表: 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 没有默认构造函数的类类型...,因为使用初始化列表可以不必调用默认构造函数来初始化 initializer_list 列表初始化 用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list...抽象类:含有纯虚函数的类 接口类:仅含有纯虚函数的抽象类 聚合类:用户可以直接访问其成员,并且具有特殊的初始化语法形式。...因此,在 default 和 copy 构造函数之外,weak_ptr 只提供 “接受一个 shared_ptr” 的构造函数。

3.7K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言与C++面试知识总结

    const 的指针与引用 指针 指向常量的指针(pointer to const) 自身是常量的指针(常量指针,const pointer) 引用 指向常量的引用(reference to const)...有些场合必须要用初始化列表: 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 没有默认构造函数的类类型...,因为使用初始化列表可以不必调用默认构造函数来初始化 initializer_list 列表初始化 用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list...抽象类:含有纯虚函数的类 接口类:仅含有纯虚函数的抽象类 聚合类:用户可以直接访问其成员,并且具有特殊的初始化语法形式。...因此,在 default 和 copy 构造函数之外,weak_ptr 只提供 “接受一个 shared_ptr” 的构造函数。

    5K41

    【Example】C++ 标准库常用容器全面概述

    -- 《C++ Reference》 头文件: #include 构造语法: // 空初始化 std::vector name; // 带有默认集合 std::vector...back 返回对list中最后一个元素的引用。 begin 返回list中指向起始位置的迭代器。 cbegin 返回list中起始的位置的常量迭代器。...at 返回对deque中指定位置的元素的引用。 back 返回对deque中最后一个元素的引用。 begin 返回指向起始的迭代器。 cbegin 返回指向起始的常量迭代器。...基于红黑树的 map 会根据键的大小自动升序排序,基于哈希表的则无序。 map 可以根据键的映射直接修改元素值。但是,键却是常量无法修改,只能删除已有的键值对再添加新的。...】C++ 运算符重载 【Example】C++ 标准库智能指针 unique_ptr 与 shared_ptr 【Example】C++ 接口(抽象类)概念讲解及例子演示 【Example】C++ 虚基类与虚继承

    3.4K30

    C++关键知识点梳理

    ,例如,get操作的成员函数最好定义为常量成员函数;常量对象、常量对象的引用或指针都只能调用常量成员函数。...初始化列表类的常量和引用成员必须在初始化列表中初始化,因为这两类成员不支持赋值操作,对象通过初始化列表初始化避免调用对象的默认构造函数进行初始化,因此效率更高。...类是C++实现面向对象编程的三大特征:继承、封装、动态的方式之一;类具备构造函数和析构函数。类构造函数/默认构造函数:控制对象的初始化过程,成员的初始化顺序与它们在类定义中出现的顺序一致。...类设计的工具拷贝、赋值、销毁拷贝构造函数:将一个对象作为非引用实参、将一个非引用对象直接作为函数返回值、用花括号列表初始化一个数组或者一个类成员时均使用了拷贝构造函数。...oop封装C++中封装通过对类的访问权限实现,类将客观事物抽象成数据成员和方法,并通过public,protected,private三种访问权限控制其他对象对类的访问和继承。

    98430

    基础知识_Cpp

    将noncopyable的构造函数和析构函数设置protected,这样该类无法创建对象,但是子类中可以调用。...指针和引用的区别 指针也是一个变量,里面存储的内容是一个地址。而引用本质上是一个常量指针,引用只允许初始化,不能再修改。 编译指针和引用的代码,在汇编上是一样的:c++中,引用和指针的区别是什么?...当对vector插入或删除中间一个元素后,原位置之后的迭代器会失效。 对list、map、set的结点进行修改后,一般只会导致当前迭代器失效。...常量指针(或引用)与非常量指针(或引用)之间的转换。...效率,列表初始化是在变量创建的时候就进行初始化,相比构造函数体内的赋值要节省一遍拷贝操作,能提高运行时的效率。

    2K30

    终极 C++避坑指南

    // 引用初始化其实是指针的语法糖 std::cout 引用其实是解指针的语法糖 但与此同时,const 引用还可以接收常量,这时,由于常量根本不是变量,自然也不会有内存地址,...,但这里的buf1是Demo函数的局部变量,并不是将亡的,所以右值引用不能接受。...假如g_test1在g_test2之前初始化,那么整个程序不会出现任何问题,但如果g_test2在g_test1前初始化,那么在Test2的构造函数中,得到的就是一个未初始化的test1引用,这时候访问... 调用初始化函数 // 通常简写为: NSString *str = [[NSString alloc] init]; 但是在 C++中,初始化方法并不是一个普通的类方法,而是特殊的构造函数,那如何手动调用构造函数呢...() {   std::mapstd::mapstd::string>> ma;   // 例如想给key为(1, 2)新增value为"abc"的   // 由于无法确定外层key

    2.3K20

    常见c和cpp面试题目汇总(一)

    一、C和C++的区别: 1、C是面向过程的语言,是一个结构化的语言,考虑如何通过一个过程对输入进行处理得到输出;C++是面向对象的语言,主要特征是“封装、继承和多态”。...3、C++支持函数重载,C不支持函数重载 4、C++中有引用,C中不存在引用的概念 二、C++中指针和引用的区别: 1、 指针是一个新的变量,存储了另一个变量的地址,我们可以通过访问这个地址来修改另一个变量...而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象的实际类型,是类本身还是类的派生类等等 2)虚函数的调用需要虚函数表指针,而该指针存放在对象的内存空间中;若构造函数声明为虚函数,那么由于对象还未创建...调用拷贝构造函数的情形: 1)用类的一个对象去初始化另一个对象的时候 2)当函数的参数是类的对象时,就是值传递的时候,如果是引用传递则不会调用 3)当函数的返回值是类的对象或者引用的时候 举例: #include...因为如果其他对象可以获得该属性的非常量的引用,那么对该属性的单纯赋值就会破坏业务规则的完整性。

    1.4K31

    C++面向对象程序设计

    ---- 4.2.1 构造函数和析构函数 ---- 对象的初始化和清理也是两个非常重要的安全问题 ​ 一个对象或者变量没有初始状态,对其使用后果是未知 ​ 同样的使用完一个对象或变量,没有及时清理...,也会造成一定的安全问题 解决方法: c++利用了构造函数和析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。...拷贝构造函数调用时机 ---- C++中拷贝构造函数调用时机通常有三种情况 使用一个已经创建完毕的对象来初始化一个新对象 值传递的方式给函数参数传值 以值方式返回局部对象 示例: #include <...---- 默认情况下,c++编译器至少给一个类添加3个函数 1.默认构造函数(无参,函数体为空) 2.默认析构函数(无参,函数体为空) 3.默认拷贝构造函数,对属性进行值拷贝 构造函数调用规则如下:...纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ; 当类中有了纯虚函数,这个类也称为抽象类(只要有一个函数是纯虚函数,就是抽象类) 抽象类特点: 无法实例化对象 派生类必须重写抽象类中的纯虚函数

    41250

    C++面向对象程序设计

    ---- 4.2.1 构造函数和析构函数 ---- 对象的初始化和清理也是两个非常重要的安全问题 ​ 一个对象或者变量没有初始状态,对其使用后果是未知 ​ 同样的使用完一个对象或变量,没有及时清理...,也会造成一定的安全问题 解决方法: c++利用了构造函数和析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。...拷贝构造函数调用时机 ---- C++中拷贝构造函数调用时机通常有三种情况 使用一个已经创建完毕的对象来初始化一个新对象 值传递的方式给函数参数传值 以值方式返回局部对象 示例: #include <...---- 默认情况下,c++编译器至少给一个类添加3个函数 1.默认构造函数(无参,函数体为空) 2.默认析构函数(无参,函数体为空) 3.默认拷贝构造函数,对属性进行值拷贝 构造函数调用规则如下:...纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0 ; 当类中有了纯虚函数,这个类也称为抽象类(只要有一个函数是纯虚函数,就是抽象类) 抽象类特点: 无法实例化对象 派生类必须重写抽象类中的纯虚函数

    1.2K10

    C++中auto关键字的用法详解

    ,使用auto定义变量时必须对其进行初始化 return 0; } 编译结果: 注: 使用 auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto 的实际类型。.... auto不能推导的场景 auto不能作为函数的参数 因为编译器无法对a的实际类型进行推导 auto不能直接用来声明数组 为了避免与C++98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法...4.auto的好处 在C++中因为类,命名空间等语法会出现如std::mapstd::string, std::string>::iterator这样的特别长的类别,若单纯用typedef来简略代码则会出现新的麻如...关键字来声明成员变量,并通过构造函数列表初始化语法或默认成员初始化器来推导类型。...::cout std::endl; } 在这个例子中,fixed_multiply函数模板接受一个类型为T的值和一个auto类型的常量N,然后返回乘积。

    38410

    【C++篇】深度解析类与对象(下)

    3.没有默认构造函数的类类型成员 如果成员是其他类的对象且没有默认构造函数,则必须通过初始化列表进行初始化。否则,编译器无法为其分配默认初值,导致编译错误。...2.必须使用的场合 某些成员(如引用和常量)只能在初始化列表中进行初始化,这是 C++ 语言规范的要求。...此外,引用类型成员、const 成员以及没有默认构造函数的类类型成员,必须在初始化列表中进行显式初始化,无法在构造函数体内赋值。...建议始终保持初始化列表中的顺序与成员变量声明顺序一致,以避免潜在的未定义行为。 1.6 常见错误 (1).忘记初始化引用或常量成员 引用类型和常量成员必须通过初始化列表进行初始化,否则编译器会报错。...C++支持隐式和显式类型转换,这在开发复杂系统时非常有用。 2.2 隐式类型转换 如果一个类有一个接受单个参数的构造函数,那么该类的对象可以通过传递该类型的参数进行隐式构造。

    11710

    C++ 核心编程

    引用在初始化后,不可以改变 引用做函数参数 作用:函数传参时,可以利用引用的技术让形参修饰实参 优点:可以简化指针修改实参 #include using namespace std...函数调用作为左值 实际上test方法中是返回a的引用,即相当于将a进行赋值1000 引用的本质 本质:引用的本质在c++内部实现是一个指针常量....而func(10); ,10是常量。如果加载时上面的void func(int& a)方法,是不合法的。引用必须有一个合法的内存空间,而这里10是在常量区里面。...c++利用了构造函数和析构函数解决上述问题,这两个函数将会被编译器自动调用,完成对象初始化和清理工作。...抽象类特点: 无法实例化对象 子类必须重写抽象类中的纯虚函数,否则也属于抽象类 class Base { public: virtual void func() = 0; }; class Son

    2.1K20

    Efficient&Elegant:Java程序员入门Cpp

    但是在复杂具体类型以及抽象类型中,逐成员复制常常是不正确的。 原因是涉及得到指针的成员的类,在拷贝操作中,很可能复制出来的只是对真实数据的指针或引用,而并没有对真实数据进行拷贝一份副本。...头文件中的移动构造函数 // 先用初始化器按照实参原对象的大小将数据移到新对象中。...= 0; } &:引用 &&:右值引用,我们可以给该引用绑定一个右值,大致意思是我们无法为其赋值的值,比如函数调用返回一个整数。...换句话讲,右值引用的含义就是引用了一个别人无法赋值的内容。 几点注意: 该移动构造函数不接受const实参,毕竟移动构造函数最终要删除掉它实参的值。 我们也可以根据这个思想构建移动赋值运算符。...抑制操作 对于层次类来讲,使用默认的拷贝和移动构造函数都意味着风险:因为只给出一个基类的指针,我们无法了解派生类有什么样的成员,当然也不知道该如何操作他们。

    1.9K71

    《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」

    拷贝构造函数 拷贝构造函数是一种特殊的构造函数,其形参是本类对象的引用。拷贝构造函数的作用是在建立一个新对象时,使用一个已存在的对象去初始化这个新对象。...~ 5.2 派生类的构造函数和析构函数 构造函数的主要作用是对数据进行初始化。在派生类中,如果对派生类新增的成员进行初始化,就需要加入派生类的构造函数。...与此同时,对所有从基类继承下来的成员的初始化工作,还是由基类的构造函数完成,但是基类的构造函数和析构函数不能被继承,因此必须在派生类的构造函数中对基类的构造函数所需要的参数进行设置。...,子对象名n(参数表n) { 派生类新增成员的初始化语句 } 在定义派生类对象时,构造函数的调用顺序如下: 调用基类的构造函数,对基类数据成员初始化。...调用子对象的构造函数,对子对象的数据成员初始化。 调用派生类的构造函数体,对派生类的数据成员初始化。

    3.4K40

    C++之面向对象的语法笔记

    前言 最近项目在开发涉及到的C++内容相对比较多,整理一下,过程中用到的C++面向对象的语法笔记 正文 知识点的概要 C++ 类 & 对象 值传递&引用传递 拷贝构造函数 继承& 多态 友元 模板 类型转换...已初始化且初值非0的全局变量和静态局部变量 .text段 可执行代码、只读变量,全局静态变量 //引用传递 //c++ 引用 是内存空间的别名 不存在拷贝 只传递内存别名 void funRefPass...引用传递的结果.png 拷贝构造函数 拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。...拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给函数。 复制对象,并从函数返回这个对象。 对拷贝,C++ 的String源码,最能体现。...重载函数之间的区分主要在参数和常量性(const)的不同上,若仅仅是返回值或修饰符 virtual,public/protected/private的不同不被视为重载函数(无法通过编译)。

    1.6K40

    《Effective Modren C++》 进阶学习(上)

    对于通用引用的推导,左值实参会被特殊对待 对于传值类型推导,实参如果具有常量性和易变性会被忽略 在模板类型推导时,数组或者函数实参会退化为指针,除非它们被用于初始化引用 2....如《Effective Modren C++》举的例子: std::unordered_mapstd::string,int> m; ... for(const std::pairstd::string...,int>& p : m) { ... } std::unordered_map 的key是一个常量,所以std::pair的类型不是std::pairstd::string,int>而是 std:...要求变窄转换 只有当传入的参数在编译器上无法转换成std::initializer_list中的T类型,才会匹配普通的构造函数。...使用constexpr可以在编译时对常量表达式进行类型检查和错误检查。如果在常量表达式中使用了不允许的操作或无效的值,编译器会在编译时发出错误或警告,帮助我们及早发现并修复问题。 16.

    20320

    C++11

    ,这里会调用构造函数初始化 Date d2{ 2022, 1, 2 }; Date d3 = { 2022, 1, 3 }; return 0; } map的新初始化 int main() {...int&& r1 = 10; // error C2440: “初始化”: 无法从“int”转换为“int &&” // message : 无法将左值绑定到右值引用 int a = 10...改正: ,再加一个模版参数,进行推导是左值引用还是右值引用,而不是用原来进行实例化的模版参数 8 新的类功能 强制生成 默认成员函数 原来C++类中,有6个默认成员函数: 1. 构造函数 2....int x = 10; int c = 9; //x在{}中无法修改,所以要用到mutable,mutable可以取消其常量性。...Args> /* unspecified */ bind (Fn&& fn, Args&&... args); 可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对

    14110
    领券