CS144-Lab0 学习笔记
编程tip
- 在进行数学运算时,增加中间变量
比如
bool Reader::is_finished() const
{
return flag_closed && buf.size() <= 0;
}
改成
bool Reader::is_finished() const
{
bool is_fully_poped = buf.size() <= 0;
return flag_closed && is_fully_poped;
}
增加中间变量,用中间变量的变量名来代替代码注释
- 减少不必要的if语句
void Writer::push( string data )
{
// if(data.size() + buf.size() > capacity_) {
// buf.append(data.substr(0, capacity_ - buf.size()));
// bytes_pushed_cnt += capacity_ - buf.size();
// } else {
// buf.append(data);
// bytes_pushed_cnt += data.size();
// }
// 更简洁的实现
std::string data_append = data.substr( 0, available_capacity() );
buf.append( data_append );
bytes_pushed_cnt += data_append.size();
}
CPP相关
explicit关键字
主要用于确保某个类的构造函数只能显式调用,不能被隐式转换。
通常建议在单参数构造函数上使用 explicit,以防止意外的类型转换。
使用场景
-
防止隐式类型转换:
当你有一个带参数的构造函数时,编译器可能会自动调用这个构造函数来进行隐式类型转换。使用explicit
关键字可以防止这种情况发生。class MyClass { public: explicit MyClass(int x) { // 构造函数 } }; void func(MyClass obj) { // 函数实现 } int main() { func(42); // 错误:不能隐式转换 int 到 MyClass func(MyClass(42)); // 正确:显式构造 MyClass 对象 return 0; }
在上面的例子中,
MyClass
的构造函数被标记为explicit
,因此不能通过隐式转换将int
转换为MyClass
对象。必须显式地调用构造函数。 -
防止不必要的隐式转换:
隐式转换有时会导致代码的可读性降低,甚至引发难以发现的错误。使用explicit
可以避免这种情况。
总结
explicit
关键字用于防止构造函数或转换函数的隐式调用。- 它提高了代码的安全性和可读性,避免了不必要的隐式转换。
- 通常建议在单参数构造函数上使用
explicit
,以防止意外的类型转换。
protected 关键字
-
访问权限:被标记为
protected
的成员可以被该类的成员函数访问,也可以被该类的派生类(子类)访问,但不能被类的外部代码直接访问。 -
用途:通常用于希望在类的外部不直接访问某些成员,但又希望在继承时能够访问这些成员的场景。这种设计允许子类能够使用和修改父类的某些数据或方法,而不暴露给外部使用。
delete关键字
使用delete关键字显式禁止某些操作
// Copy/move constructor/assignment operators
// FileDescriptor can be moved, but cannot be copied implicitly (see duplicate())
FileDescriptor( const FileDescriptor& other ) = delete; // copy construction is forbidden
FileDescriptor& operator=( const FileDescriptor& other ) = delete; // copy assignment is forbidden
FileDescriptor( FileDescriptor&& other ) = default; // move construction is allowed
FileDescriptor& operator=( FileDescriptor&& other ) = default; // move assignment is allowed
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!