【发布时间】:2016-07-09 19:02:35
【问题描述】:
假设你有这个:
struct Foo {
Foo(unsigned int x) : x(x) {}
unsigned int x;
};
int main() {
Foo f = Foo(-1); // how to get a compiler error here?
std::cout << f.x << std::endl;
}
是否可以防止隐式转换?
我能想到的唯一方法是明确提供一个构造函数,该构造函数接受 int 并在 int 为负数时生成某种运行时错误,但如果我能得到一个编译器错误会更好这个。
我几乎可以肯定,存在重复,但我能找到的最接近的是this question,它询问为什么允许隐式转换。
我对 C++11 和 C++11 之前的解决方案都感兴趣,最好是两者都适用的解决方案。
【问题讨论】:
标签: c++ implicit-conversion unsigned-integer