Oys*_*ein 14 c++ types boolean implicit
考虑foo具有两个这样定义的构造函数的类:
class foo
{
public:
foo(const std::string& filename) {std::cout << "ctor 1" << std::endl;}
foo(const bool some_flag = false) {std::cout << "ctor 2" << std::endl;}
};
Run Code Online (Sandbox Code Playgroud)
使用字符串文字实例化类,并猜测调用哪个构造函数?
foo a ("/path/to/file");
Run Code Online (Sandbox Code Playgroud)
输出:
ctor 2
我不了解你,但我没有发现编程历史中最直观的行为.我打赌它有一些聪明的理由,但我想知道它可能是什么?
Lou*_*nco 10
写这篇文章在C中很常见
void f(T* ptr) {
if (ptr) {
// ptr is not NULL
}
}
Run Code Online (Sandbox Code Playgroud)
你应该做一个const char*构造函数.
您将 char* 传递给 foo 构造函数。这可以隐式转换为布尔值(所有指针都可以)或 std::string。从编译器的角度来看,第一个转换比第二个“更接近”,因为它支持标准转换(即指向 bool 的指针)而不是用户提供的转换(std::string(char*) 构造函数)。
| 归档时间: |
|
| 查看次数: |
5323 次 |
| 最近记录: |