【发布时间】:2012-07-27 23:06:54
【问题描述】:
当我编译以下代码时,编译器会给我警告:
"Implicit conversion loses integer precision: 'std::streamsize' (aka 'long') to 'int'".
我对这个警告有点困惑,因为我只是尝试保存精度的当前值,以便稍后将其设置回原始值。
#include <iomanip>
#include <iostream>
int main() {
std::streamsize prec = std::cout.precision();
std::cout << std::setprecision(prec);
}
在这种情况下,保存精度值并稍后将其设置回来的正确方法是什么?
【问题讨论】:
-
您使用的是哪个编译器?我没有收到
g++ -O3 -Wall -Wextra -Werror -pedantic的警告或错误 -
什么编译器?我认为你的实现中的
std::streamsize是signed long,而setprecision需要一个签名的int。 -
@Prashant:肯定是clang、Visual Studio、Borland、Intel C等。
-
正是 C++11 重新引入
auto关键字以从表达式中自动推断变量类型的原因。否则你的代码对我来说看起来是正确的...... -
在使用具有相同编译器标志的
clang++时,我也没有收到任何警告或错误,但我的是Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn)
标签: c++