我有这样一门课:
class A {
void init(int a){
_data.resize(a); //! (1)
}
//other parts of the code are not important ...
private:
std::list<std::vector<double>> _data;
}在(1)中,我收到了文字警告:
implicit conversion from int to size_type(aka unsigned long)我想知道什么是正确的方法来消除这个警告?也许是这样的:
_data.resize(static_cast<decltype(_data)::size_type>(a)注释:--我猜代码应该更改为:
init(size_t a) 但是让我们假设我们不能更改类接口。
发布于 2016-04-27 13:13:10
您的示例使用了正确的方法:
_data类型更改的影响。所以,如果改变界面是没有问题的,那就坚持下去吧。
在使用之前,最好为输入添加是否正确的检查。在将负值转换为无符号之前检查它是最基本和最有用的。
发布于 2016-04-27 13:16:06
最正确的方法是,正如你所说:
_data.resize(static_cast<decltype(_data)::size_type>(a));但是最大的问题是与unsigned的签名,您说您被int困住了,所以您可以使用:
_data.resize(static_cast<unsigned int>(a));发布于 2016-04-27 13:13:36
就这么简单:
_data.resize(std::size_t(a));像这样疯狂:
_data.resize(static_cast<std::size_t>(a));C风格的强制转换也支持:
_data.resize((std::size_t)a);https://stackoverflow.com/questions/36890739
复制相似问题