![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++笔记
45688966
这个作者很懒,什么都没留下…
展开
-
结构体内存对齐
结构体内存对齐转载 2022-11-04 22:35:39 · 67 阅读 · 0 评论 -
C++The unexpected() function
当一个具有异常规范( exception specification)的函数抛出了异常规范中没有列出的异常时,c++运行时做如下操作:1.调用unexpected()函数。2.unexpected()函数调用由unexpected_handler指向的函数,默认情况下,unexpected_handler指向函数terminate()。你可以用set_unexpected()函数替换unexpected_handler的默认值。虽然unexpected()不能返回,但它可能抛出(或重新抛出)异常。假翻译 2020-08-13 11:38:45 · 876 阅读 · 0 评论 -
C++malloc与new的区别
malloc/free是标准库函数,new/delete是C++运算符malloc失败返回空,new失败抛异常new/delete会调用构造、析构函数,malloc/free不会,所以他们无法满足动态对象的要求。new返回有类型的指针,malloc返回无类型的指针...原创 2020-08-06 11:54:36 · 108 阅读 · 0 评论 -
C++构造函数析构函数调用顺序
在使用构造函数和析构函数时,需要特别注意对它们的调用时间和调用顺序。在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反:最先被调用的构造函数,其对应的(同一对象中的)析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。简单来说,其构造函数的顺序就一句话:基类构造函数 -> 成员的构造函数 -> 构造函数体内语句eg.#include <iostream>using namespace std;class A { public: A(转载 2020-08-06 11:29:36 · 545 阅读 · 0 评论 -
c++类的自动类型转换和强制类型转换
下面讨论类的类型转换。我们先来看看C++是如何处理内置类型转换的。将一个标准类型变量的值赋给另一种标准类型的变量时,如果这两种类型兼容,则C++自动将这个值转换为接受变量的类型。double time = 11; //int value 11 converted to type double利用构造函数将typename->类在C++中,接受一个参数的构造函数为将类型与该参数相同的值转换为类提供了蓝图。下面的构造函数用于将double转换为Stonewt类类型;class Stonewt原创 2020-08-04 13:52:12 · 338 阅读 · 0 评论 -
c++运算符重载限制
1.重载后的运算符必须至少有一个操作数是用户定义的类型2.使用运算符不能违反运算符原来的语法规则,eg.不能将%重载成使用一个操作数,此外不能修改运算符的优先级。3.不能创建新的运算符。4.以下运算符不能重载:5.大多数运算符都可以通过成员或非成员函数进行重载,但以下运算符只能通过成员函数进行重载。1)= 赋值运算符2) ()函数调用运算符3)[ ] 下标运算符4)-> 通过指针访问类成员的运算符。...原创 2020-08-03 12:31:13 · 480 阅读 · 0 评论 -
C++中类中静态变量在类外初始化
我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。两者的区别在于:初始化是赋一个初始值,而定义是分配内存。静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。可以通过以下几个例子更形象的说明这个问题//test.cpp #include <stdio.h> class A { public:转载 2020-08-02 15:32:59 · 4905 阅读 · 2 评论 -
c++带默认参数的函数
c++默认参数默认参数指的是当函数调用中省略了实参时自动使用的一个值。1)如何设置默认值呢?默认参数在函数声明中提供,当又有声明又有定义时,定义中不允许默认参数。如果函数只有定义,则默认参数才可出现在函数定义中。2)对于带参数列表的函数,必须从右向左添加默认值,也就是说,要为某个参数设置默认值,则必须为它右边的所有参数提供默认值:int harpo(int n,int m = 4 ,int j = 5); // VALIDint chico(int n,int m = 6, int j);原创 2020-07-31 10:56:46 · 408 阅读 · 0 评论 -
C++ 定义与声明
C++声明与定义的区别:①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。②变量声明:用于向程序表明变量的类型和名字。③定义也是声明:当定义变量时我们声明了它的类型和名字。④extern关键字:通过使用extern关键字声明变量名而不定义它。1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。extern int i // 声明不是定义int i // 定义也是声明2.如果声明有初始化式,就被当作定义转载 2020-07-28 12:10:09 · 1379 阅读 · 0 评论 -
C++STLvector的用法
vector:1.vector是表示可变大小数组的序列容器,与数组类似;2.vector中的元素相继存储,意味着可以采用下标对vector的元素进行访问,和数组一样高效,但是不同于数组,vector的大小是可以动态改变的。3.vector的存储是自动管理的,按需扩张收缩。vector通常占用多于静态数组的空间,因为要分配更多的内存以管理将来的增长,vector所用的方式不是在每次插入元素时,而只在额外内存耗尽时重分配。分配的内存总量可用capacity()函数查询vector上的常见操作复杂度:随原创 2020-05-12 20:18:53 · 175 阅读 · 0 评论 -
C/C++函数匹配
c++函数匹配函数匹配:编译器将函数调用和函数定义进行联系的过程。Function matching int C(gcc)c语言中使用函数名进行函数匹配,所以c语言中的每一个函数的函数名都应该不同。Function matching in C++(g++)C++使用函数签名进行函数匹配。函数签名:由函数名和参数列表组成,不包括函数返回值!void print(int a,int ...原创 2020-05-07 20:25:17 · 544 阅读 · 0 评论