int, long, long long在32位虚拟机下大小

类型32位实体机64位实体机32位虚拟机
int4字节4字节4字节
long4字节8字节4字节
long long8字节8字节8字节

函数返回引用类型

修改外部对象

返回引用使得函数可以修改被调用时传递的对象,而不需要通过指针或返回新对象的方式。这在需要修改对象的情况下非常有用,可以提高代码效率和可读性。

链式调用

返回引用可以支持链式调用,使代码更加简洁和易于阅读。例如,可以写成obj.func1().func2().func3()的形式。

延长临时对象的生命周期

当函数返回一个临时对象的引用时,这个临时对象的生命周期会被延长,直到最后一次使用它的时候。这避免了不必要的对象拷贝,提高了效率。

实现运算符重载**

返回引用是实现运算符重载的关键,比如重载赋值运算符operator=时,通常会返回一个对当前对象的引用,以支持链式赋值。

实现智能指针

在实现智能指针时,通常会重载operator->operator*,它们需要返回引用来实现对象的间接访问。

  1. 重载operator

重载operator->的目的是为了支持通过智能指针访问其所管理对象的成员。例如,如果有一个智能指针sp管理一个对象obj,我们希望能够使用sp->member来访问objmember成员。

为了实现这一点,operator->需要返回一个指向被管理对象的指针或引用。通常,它会返回一个指向被管理对象的原始指针的引用,如下所示:

T* operator->() const { return ptr; // ptr是智能指针内部维护的原始指针 }

返回引用而不是值的原因是,如果返回值,那么在表达式sp->member中,member将被解析为一个临时对象,而不是obj的实际成员。

  1. 重载operator*

重载operator*的目的是为了支持通过智能指针直接访问其所管理的对象。例如,如果有一个智能指针sp管理一个对象obj,我们希望能够使用*sp来获取obj的一个引用。

为了实现这一点,operator*需要返回一个指向被管理对象的引用,如下所示:

T& operator*() const { return *ptr; // ptr是智能指针内部维护的原始指针 }

代码编译过程

见:cpp编译流程

shared_ptr实现、线程安全

见:shared_ptr

函数入桟顺序

未定义行为,但是printf一定先进后出

udp占用80端口,tcp还能继续使用吗

不同协议可以占。 eg:OS收到数据包后判断协议后向上传递

Linux端口机制