您有多少次读到过关于 C++ 的这样的评论:
C++ 是一门即使对经验丰富的 C++ 开发者来说也很难的语言。即使是最简单的算法,您也得解释这门语言的许多微妙之处。以一个 Hello World 示例来说:
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
}什么是#include命令?什么是std::cout。为什么要有::?什么是是什么<<?哦哦,这是一个重载运算符!什么是重载运算符?那么,对ints来说,它是移位运算;但无论std::cout是什么,它都向控制台输出内容。哦哦,std::cout是一个流,而流的<<和>>运算符都被重载了。让我们看看 Python 中的同样示例:
print("Hello World!")如果我们直接使用标准库提供的方法和工具,这种看法或许是对的。但在真实的 C++ 项目中情况并非如此。事实上,许多 C++ 项目都包含这样的代码:
#include "utilities"
int main()
{
print("Hello World!");
}我们通过 std::cout 拥有了一套用于控制台输出的底层机制,以及它所提供的一切可能性,这让这门语言具备了许多其他语言所没有的丰富性。如何充分利用这种丰富性,产出易读、易维护且高效的代码,取决于您自己。
同样的观察也适用于任何被认为过于复杂的 C++ 代码。在 C++ 中,我们拥有简化其使用所需的一切,可以提供隐藏复杂性的库,让这门语言更易于使用。
再举一个例子:打开一个文件并读取它的全部内容。在 C# 中,您可以这样做:
string text = System.IO.File.ReadAllText(@"C:\Users\Public\TestFolder\WriteText.txt");
但是,有什么能阻止我们在 C++ 中做同样的事呢?
string text = FileHelper.ReadAllText(@"C:\Users\Public\TestFolder\WriteText.txt");
然而,许多开发者可能会问:为什么我需要另一个库才能轻松地做我想做的事?为什么不把这些便利设施嵌入标准库?
也许最好的回答是另一个问题:为什么每门语言都有那么多库?即使是最简单的语言,我们迟早也需要使用外部库。而且在现实项目中,即便用 Python,也常常使用内部库——当然,还有许多外部库。
别忘了,编程语言是面向工程师的,他们具备运用语言所提供能力的基本技能。在任何领域,工程师的工作不就是分析问题、随机应变并给出高效的解决方案吗?C++ 也许很底层,但它给了我们更多的可能性,它的丰富性可以帮助我们高效地解决问题。
就我个人而言,在我参与过的许多 C++ 项目中,我们都有一个内部库来简化重复性任务。任何遇到重复需求的开发者都可以提议往库里添加一个工具,整个团队都会从这些新增功能中受益。这种方法并不需要团队里有 C++ 大师或专家——这只是常识。
