【发布时间】:2015-10-07 04:57:04
【问题描述】:
我试图找出防止整数 0 被隐式转换为 nullptr_t 然后传递给采用指针的构造函数的最佳方法。显式不这样做,但我可以让 nullptr_t 导致模棱两可的重载错误:
#include <typeinfo.h>
struct A {
explicit A(char*) { }
};
struct B {
B(nullptr_t a) = delete;
B(char*) { }
};
int main(int argc, char* argv[])
{
A a(0); // darnit I compiled...
B b1(0); // good, fails, but with only b/c ambiguous
B b2((char*)0); // good, succeeds
B b3(1); // good, fails, with correct error
}
还有比这更好的方法吗?还有,delete到底是做什么的?
【问题讨论】:
-
这里不是 C++ 专家,但我想如果你想阻止你的构造函数获取 int,你会想删除
B(int)。 -
@user2357112 这不是 OP 想要的。他想避免整数常量 0 转换为空指针的特定极端情况。
-
@TheParamagneticCroissant:删除
B(int)不能解决这个问题吗? -
@user2357112:是的,这似乎可以解决问题。我会尝试一段时间,看看会发生什么。将其作为答案,以便我接受。
-
gcc 有一个警告标志,您可以在编译时将其设置为错误。 VC++ 可能有类似的警告。
标签: c++ c++11 visual-studio-2013 implicit-conversion explicit-conversion