升級現代 C++ 該改變的習慣

1. 使用 nullptr,而不要使用 NULL 或 0 表示空指標。

考慮以下兩個 Func,傳入 0 時會呼叫 Func(int),而傳入 NULL 時會預期呼叫的是 Func(void*),可惜事與願違,呼叫的還是 Func(int),這是因為 NULL 被定義為 0,在 C++ 11 你只要改用 nullptr 就可以消除這種歧義。

void Func(void*)
{}
void Func(int)
{}
int main()
{
	Func(0); // call Func(int)
	Func(NULL); // call Func(int),不如預期
	Func(nullptr); // call Func(void*)
	return 0;
}

2. 使用 Raw string literals 取代逸出字元的使用。

以前要顯示 ” 或 \ 之類的字元需要在前面加上 \,現在不用了,直接將字串用 R”(要顯示的字串)” 包起來即可。

int main()
{
	const char* s1 = "\"hello\nworld\"";
	const char* s2 = R"(\"hello\nworld\")";
	const char* s3 = R"("hello
world")";
	std::cout << s1 << std::endl;
	std::cout << std::endl;
	std::cout << s2 << std::endl;
	std::cout << std::endl;
	std::cout << s3 << std::endl;
	return 0;
}
Raw string literals

3. 使用 Digit separators 增加程式碼可讀性。

如果程式碼內有一個很大的數字,現在可以使用 ‘ 來幫助閱讀,例如當作千分位使用。

int main()
{
	unsigned long long n1 = 10929085235;
	unsigned long long n2 = 10'929'085'235;
	std::cout << n1 << std::endl;
	std::cout << n2 << std::endl;
	return 0;
}
Digit separators