在编写 C++ 应用程序时,我通常会限制自己使用 C++ 特定的语言功能。大多数情况下,这意味着尽可能使用 STL 而不是 CRT。
对我来说,STL 比使用 CRT 更加流畅和可维护。考虑以下:
std::string str( "Hello" );
if( str == "Hello" ) { ... }
C-Runtime 等价物是:
char const* str = "Hello";
if( strcmp( str, "Hello" ) == 0 ) { ... }
就我个人而言,我发现前一个例子更容易看。我更清楚发生了什么。当我编写第一次代码时,我的第一件事总是以最自然的方式编写代码。
我的团队对前一个示例的一个担忧是动态分配。如果字符串是静态的或者已经分配到其他地方,他们认为可能导致碎片或在此处进行浪费分配是没有意义的。我反对这一点的论点是首先以最自然的方式编写代码,然后在证明代码导致问题后返回并更改它。
我不喜欢后一个示例的另一个原因是它使用了 C 库。通常我会不惜一切代价避免它,因为它不是 C++,它的可读性较差,更容易出错,并且存在更多的安全风险。
所以我的问题是,我是否正确避免使用 C 运行时?我真的应该关心编码中这一步的额外分配吗?在这种情况下,我很难判断我是对还是错。