【发布时间】:2019-10-31 14:08:12
【问题描述】:
以下代码产生编译器警告 C4267:
MyClass::MyClass(int size) {...};
MyClass(someVector.size()); //C4267 - Conversion of size_t to int
由于 std::vector::size() 返回 size_t。解决此问题的一种方法是在调用构造函数时使用强制转换,但这需要在每次使用 MyClass 时使用强制转换。 相反,我想创建一个接受 size_t 的 MyClass 构造函数的重载,执行强制转换,然后正常进行:
MyClass::MyClass(int size) {...};
MyClass::MyClass(size_t size) {...};
不幸的是,尽管这样做,我仍然收到 C4267 编译器警告。更糟糕的是,在其他地方发生的其他 MyClass 调用(传递一个 int)现在会生成编译器错误 C2668,“'function':对重载函数的模糊调用”。
我真的很希望能够在不修改警告级别的情况下解决这个问题。
【问题讨论】:
-
为什么不去掉
int构造函数? -
您使用的是哪个版本的 MSVC?它适用于 VS 2017。
-
或者您是否将
size_t定义为MyClass中的类型? -
@Jonathan 好主意,解决了。
-
std::vector<>::size()返回std::vector<>::size_type。虽然很可能是std::size_t,但使用std::vector<>::size_type可能是一个更好的主意。
标签: c++