c++ - 编译器错误 C4244 : 'initializing' : conversion from '__int64' to 'int' , 可能丢失数据

标签 c++ linux windows stdvector

我正在尝试使用 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,不是intsize_tint 转换可能会丢失数据,具体取决于 size_t 的定义方式(至少存在有符号/无符号不匹配,最终两种类型的大小不同,例如 int 为 32 位 和 64 位用于 size_t)。

关于c++ - 编译器错误 C4244 : 'initializing' : conversion from '__int64' to 'int' , 可能丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26155376/

相关文章:

C++使用delete []删除指针?

c++ - 在 C++ 中是否可以使用多个 dlopen 处理程序

c++ - C++ 类/结构成员的默认可见性

linux - MongoDB:大容量映射内存

windows - 为什么 Docker 服务停止?

c++ - 在 C++ 中从成对 vector 转换为两个独立 vector 的最快方法

linux - Netstat TCP 状态数据记录脚本

linux - 在终端中使用 vim 并使用单独的选项卡创建命令来打开 *.h 文件

windows - Windows 上 Visual Studio Code 的 PlantUML 扩展仅适用于序列图

windows - Yii2 REST API IIS 对象已移动