首页 > 解决方案 > 防止字符串文字被转换为 bool 与 std::string

问题描述

之前也有人问过类似的问题,例如String 文字匹配 bool 重载而不是 std::string

但我想知道的是,C++ 开发人员应该怎么做才能防止这种情况发生?作为编写 C++ 库供他人使用的人,我应该怎么做才能确保不会发生这种情况?这是我今天遇到的示例,其中一个库有两种initialize()方法:

void initialize(bool someflag) { /* ... */ }
void initialize(const std::string & name) { /* ... */ }

现在有问题的代码出现在想要利用此功能并以类似于以下方式调用它的应用程序中:

initialize("robert");

乍一看,你会认为这会调用initialize(string),但它实际上调用了第initialize(bool)一个布尔标志设置为 true 的函数!

是的,我知道可以这样解决:

initialize( std::string("robert") );

但这使呼叫者承担了责任。


编辑@zdan:我不认为其他链接问题中的“解决方案”是很好的解决方案,因为1)我希望不必添加const char *每个采用布尔或字符串的方法的版本,以及2)模板解决方案显着提高了受影响方法的代码可维护性,使它们几乎不可读。

标签: c++implicit-conversion

解决方案


我应该怎么做才能确保不会发生这种情况?

一种可能性是创建一个接受 a 的重载char const*并将其传递给接受 a 的重载std::string

void initialize(char const* name) { initialize(std::string(name)); }

推荐阅读