struct Foo {
void setBar(bool bar_) { bar = bar_; }
bool bar;
};
int main() {
Foo f;
f.setBar("true");
}
由于类型转换,上面的代码编译成功,即使传递了一个 char 数组,其中bool
是期待。
是否有可能导致这段代码编译失败? (首选 C++03 解决方案,因为我工作场所的编译器很古老。)
我在 StackOverflow 上查看了以下相关问题,但它们并没有完全解决这个问题。防止 C++ 中的隐式转换 https://stackoverflow.com/questions/18455755/preventing-implicit-conversion-in-c, 为什么编译器选择 bool 而不是 string 来进行 L"" 的隐式类型转换? https://stackoverflow.com/questions/316181/why-does-the-compiler-choose-bool-over-string-for-implicit-typecast-of-l
您可以声明一个函数,它需要const char*
并且不提供定义:
void setBar(const char*);
这将使其在链接时失败。不过,您仍然剩下所有其他隐式转换 - 从任何指针到 bool、积分到 bool、浮点数到 bool...
另外一个选择:
struct Foo {
void setBar(bool bar_) {}
private:
template<typename T>
void setBar(T bar) {}
};
这样,如果您使用除bool
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)