重构遗留代码,我遇到了这个函数(伪代码):
int getMessage( char * buffer, int size = 300 );
哎呀,看看那个等待溢出的缓冲区。所以我想出了一个使用 std::string 的函数,并认为使用函数重载会很好:
int getMessage( std::string & buffer );
到现在为止还挺好。但是当我尝试用字符串调用函数时:
std::string buffer;
int rc = getMessage( buffer );
我收到此错误:
cannot convert 'std::string' to 'char*' for argument '1' to 'int getMessage(char*, int)'
显然,编译器(GCC 4.1.2)努力将 std::string 转换为 char* 以满足第一个函数的参数列表(使用默认值来满足第二个参数),放弃了,但没有尝试第二个功能...
解决这个问题我不会有问题,但我想知道为什么会失败,以及是否有办法让它按预期工作。