我继承了一些代码(来自已经离开的人)并找到了这个小片段:
double minX = xVal.find('.') == string::npos ? (double)atoi(xVal.c_str()) : atof(xVal.c_str());
double minY = yVal.find('.') == string::npos ? (double)atoi(yVal.c_str()) : atof(yVal.c_str());
他选择使用atoi作为整数类型是否有某些原因?我看不出有问题:
double minX = atof(xVal.c_str());
double minY = atof(yVal.c_str());
感谢。
答案 0 :(得分:3)
真的你不应该使用atoi或atof。它们都被弃用了,分别被strtol和strtof所取代。
答案 1 :(得分:1)
没理由。这些三元运算符是额外的。 但是更好地使用strtod而不是atof - atof不会检测溢出和下溢错误。
答案 2 :(得分:0)
他的代码是: double minX =(double)atoi(xVal.c_str());
然后他发现浮动存在并且不假思索地调整代码。
答案 3 :(得分:0)
可能他被这个名字误导了,他忘记了它返回一个双重而不是浮动。如果atof返回一个浮点数,那么整数值可能会有一些精度损失。例如,在我的电脑上:
char buffer[20];
itoa(INT_MAX-113, buffer, 10);
double minXF = (float)atof(buffer);
double minXI = (double)atoi(buffer);
std::cout << (int)minXF << std::endl;
std::cout << (int)minXI << std::endl;
返回:
2147483520
2147483534
然而,由于atof返回一个double,这是无关紧要的,并且没有真正的理由使用atoi。因此,根据其他答案使用安全等价物,如果您碰巧看到他出去吃饭,可能会询问原作者。