写点什么

C/C++ 最佳实践

用户头像
jiangling500
关注
发布于: 2020 年 10 月 22 日

本文用于记录个人在使用C/C++的过程中,个人觉得是最佳实践的用法。另外,本文持续更新!!!

  • 判断mapunordered_mapsetunordered_set中某个key是否存在,推荐使用count()代替find(),理由很简单,前者的代码量比后者的少。之所以可以用count()代替find(),是因为在上述容器中,key是唯一的,因此如果key不存在的话,count()就返回0,存在的话,count()就返回1:

map<string, int> student; // key:姓名,value:年龄
student["jack"] = 18;
// 不推荐用法
if (student.end() != student.find("jack"))
{
cout << "存在" << endl;
}
else
{
cout << "不存在" << endl;
}
// 推荐用法
if (student.count("rose"))
{
cout << "存在" << endl;
}
else
{
cout << "不存在" << endl;
}
  • private继承用于“实现继承”:

class noncopyable
{
public:
noncopyable(const noncopyable&) = delete;
void operator=(const noncopyable&) = delete;
protected:
noncopyable() = default;
~noncopyable() = default;
};
class TcpServer : noncopyable
{
// ...
}
  • 计数器使用无符号整数,这样可以利用无符号整数回绕的特点:

unsigned int count = UINT_MAX;
cout << ++count << endl; // 0
  • 让结构体1字节对齐:

struct Person
{
char sex;
int age;
} __attribute__((packed, aligned(1)));
int main()
{
cout << sizeof(Person) << endl; // 5
}

当然,也可以使用如下方式:

#pragma pack(1)
struct Person
{
char sex;
int age;
};
#pragma pack()
int main()
{
cout << sizeof(Person) << endl; // 5
return 0;
}

但如果漏写了#pragma pack(),即未取消1字节对齐,那么后面定义的结构体都是1字节对齐的了,所以推荐使用第一种方式。

  • 可使用lambda表达式创建一个线程:

int main()
{
thread t([]{
cout << "this is a new thread" << endl;
});
t.join();
return 0;
}








发布于: 2020 年 10 月 22 日阅读数: 50
用户头像

jiangling500

关注

万丈高楼平地起,勿在浮沙筑高台! 2019.12.17 加入

一名IT从业者,熟悉Linux下C/C++,了解MySQL、Java等。

评论

发布
暂无评论
C/C++最佳实践