int, long, long long在32位虚拟机下大小
| 类型 | 32位实体机 | 64位实体机 | 32位虚拟机 |
|---|---|---|---|
| int | 4字节 | 4字节 | 4字节 |
| long | 4字节 | 8字节 | 4字节 |
| long long | 8字节 | 8字节 | 8字节 |
函数返回引用类型
修改外部对象
返回引用使得函数可以修改被调用时传递的对象,而不需要通过指针或返回新对象的方式。这在需要修改对象的情况下非常有用,可以提高代码效率和可读性。
链式调用
返回引用可以支持链式调用,使代码更加简洁和易于阅读。例如,可以写成obj.func1().func2().func3()的形式。
延长临时对象的生命周期
当函数返回一个临时对象的引用时,这个临时对象的生命周期会被延长,直到最后一次使用它的时候。这避免了不必要的对象拷贝,提高了效率。
实现运算符重载**
返回引用是实现运算符重载的关键,比如重载赋值运算符operator=时,通常会返回一个对当前对象的引用,以支持链式赋值。
实现智能指针
在实现智能指针时,通常会重载operator->和operator*,它们需要返回引用来实现对象的间接访问。
- 重载operator→
重载operator->的目的是为了支持通过智能指针访问其所管理对象的成员。例如,如果有一个智能指针sp管理一个对象obj,我们希望能够使用sp->member来访问obj的member成员。
为了实现这一点,operator->需要返回一个指向被管理对象的指针或引用。通常,它会返回一个指向被管理对象的原始指针的引用,如下所示:
T* operator->() const { return ptr; // ptr是智能指针内部维护的原始指针 }
返回引用而不是值的原因是,如果返回值,那么在表达式sp->member中,member将被解析为一个临时对象,而不是obj的实际成员。
- 重载operator*
重载operator*的目的是为了支持通过智能指针直接访问其所管理的对象。例如,如果有一个智能指针sp管理一个对象obj,我们希望能够使用*sp来获取obj的一个引用。
为了实现这一点,operator*需要返回一个指向被管理对象的引用,如下所示:
T& operator*() const { return *ptr; // ptr是智能指针内部维护的原始指针 }
代码编译过程
见:cpp编译流程
shared_ptr实现、线程安全
函数入桟顺序
未定义行为,但是printf一定先进后出
udp占用80端口,tcp还能继续使用吗
不同协议可以占。 eg:OS收到数据包后判断协议后向上传递