C++ “条条大路通罗马”
使用 C++ 几十年后,就慢慢掌握了 C++ 中“条条大路通罗马”的原理。任何事情都有多种解决方案,反之,造成编译失败的原因也是多种多样。本篇博客野心不小,因为我想试去厘清一些避免 C++ 编译错误的方法。但正本清源,要规避错误,首先要了解错误的源头。
愚蠢的做法:把失败简单归咎于编译器
的确,编译器有可能导致编译失败。不过,触发编译器的推手是你——程序员,做了一些不正确的操作。当程序员提供C++程序,编译器无法转换为机器代码时,编译失败。
说得更明白些?让我举一个编译失败的典型例子:
void ConvertStringToPasswordForm(char password[])
{
while (*password != '\0') *password++ = '*';
}
这个函数的驱动程序如下
int main(int argc, char** argv)
{
char* password = "MyTopSecretPasswordPublishedInABlog:-)";
ConvertStringToPasswordForm(password);
std::cout << "Password :: " << password << std::endl;
}
错误提醒信息说得很清楚:
error C2664: ‘void ConvertStringToPasswordForm(char [])’: cannot convert argument 1 from ‘const char *’ to ‘char []’
所以这是一个 const 问题,于是你想当然地把 driver 改成:
int main(int argc,