以下代码产生编译器警告C4267:
MyClass::MyClass(int size) {...};
MyClass(someVector.size()); //C4267 - Conversion of size_t to int
作为std :: vector :: size()返回size_t。解决此问题的一种方法是在调用构造函数时使用强制类型转换,但这需要在每次使用MyClass时都使用强制类型转换。 相反,我想创建MyClass的构造函数的重载,该构造函数接受size_t,执行强制转换,然后照常进行:
MyClass::MyClass(int size) {...};
MyClass::MyClass(size_t size) {...};
不幸的是,尽管如此,我仍然收到C4267编译器警告。更糟的是,其他地方发生的MyClass其他调用(通过int调用)现在会生成编译器错误C2668,“'function':对重载函数的歧义调用”。
我真的很希望能够解决此问题而不必修改警告级别。
答案 0 :(得分:0)
这是通过完全摆脱int构造函数而仅使用size_t构造函数来解决的。
普通int使用32位,而size_t使用64位。从size_t转换为int会有丢失数据的风险,但是以其他方式进行转换不会造成这种危险。结果,在转换为size_t时,构造函数的现有int用法不会产生转换警告。
非常感谢@乔纳森·波特。