C/C++
文章平均质量分 61
重学CS
这个作者很懒,什么都没留下…
展开
-
[C++]三五法则,以string类为例
C++中把析构函数、复制构造函数、拷贝复制运算符称为拷贝控制操作(big three)。如果我们在一个类中没有显式定义这些拷贝控制操作,编译器会为我们生成对应的默认版本。如果是默认的复制构造函数和拷贝复制运算符,默认的版本的行为就是简单的值复制,其行为可以理解为浅复制。所以当我们的类中含有指针类型的成员时,这些拷贝操作的语义往往不是我们期望的,我们什么时候需要显式定义这些拷贝操作呢?这三个显式操作都需要定义吗?答案是:如果需要我们显式定义析构函数,那么我们必须同时显式定义拷贝构造函数和拷贝复制运算符。原创 2022-02-27 15:53:29 · 618 阅读 · 0 评论 -
C语言:判断小端存储模式与大端存储模式
说明:大端小端模式并无优劣之分。考虑大小端存储模式影响的一个典型场景是网络通信,两台计算机通过网络传送数据时,需要考虑不同主机之间字节序是否相同,如果不同,比如发送方按大端字节序发送数据,接收方却按小端字节序解析,那么就接收不到正确的数据。为解决此问题,一般发送方可以将数据转化为网络字节序传输,而接收方将网络字节序转化为本地主机的字节序,为此,C语言提供了一下函数完成这一功能。htonl, htons, ntohl, ntohs - convert values between host and n.原创 2021-02-19 10:49:47 · 312 阅读 · 0 评论 -
浅析C++中的右值、万能引用、完美转发
右值C语言中左值与右值的含义在学习C++11的移动语义时,遇到的第一个问题就是:什么是左值,什么是右值?左值和右值这两个名词是从C语言中继承过来的,最初是为了帮助记忆的:左值可以位于赋值语句的左侧,右值则不能。注意左值可以位于赋值语句左侧,也可以位于赋值语句右侧。int a = 1; //a是左值int b = 2; //b是左值a = b; //左值既可以位于赋值运算符左侧,也可以位于赋值运算符右侧b = a;a = a + b;a + b = 3; //error, a + b是原创 2021-02-08 16:20:59 · 471 阅读 · 0 评论 -
C++关键字:explicit与构造函数浅析
C++关键字:explicit与构造函数C++关键字explicit常常用来放在接受一个实参的构造函数(non-explicit-one-argument-constructor)前,以防止编译器在某些条件下的默认行为——调用该构造函数来实现类型转换。当声明一个构造函数为explicit时,表示这个构造函数只能通过用户显示调用来创建对象。首先谈谈explicit常常使用的地方:non-expl...原创 2019-05-19 15:39:37 · 373 阅读 · 0 评论