我正在尝试使用 std::count 而不是 std::vector,如下所示:
int count = std::count( stdVector.begin(), stdVector.end(), "element" );
在 Windows 上,它给出以下编译器错误。
错误 C4244:“正在初始化”:从“__int64”到“int”的转换,可能会丢失数据
如果我在 Windows
上按如下方式更改代码,编译器不会出现。
auto count = std::count( stdVector.begin(), stdVector.end(), "element" );
但是,对于上述更改,现在我在 linux 上遇到以下错误。
错误:ISO C++ 禁止声明没有类型的“count”
我将如何使用 std::count
来在两个平台上构建而不会出现任何错误?
最佳答案
有两件事在不同的环境中会发生不同的冲突:
第一个是 auto
作为推导类型是 C++11 的特性。可能是 linux 编译器默认没有它(只需使用 -std=c++11
,如果没有,升级!)
另一种是std::count的返回类型是size_t
,不是int
,size_t
为int
转换可能会丢失数据,具体取决于 size_t
的定义方式(至少存在有符号/无符号不匹配,最终两种类型的大小不同,例如 int 为 32 位
和 64 位用于 size_t
)。
关于c++ - 编译器错误 C4244 : 'initializing' : conversion from '__int64' to 'int' , 可能丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26155376/