Pra*_*nde 4 c++ linux windows stdvector
我试图在std :: vector上使用std :: cound,如下所示.
int count = std::count( stdVector.begin(), stdVector.end(), "element" );
Run Code Online (Sandbox Code Playgroud)
在Windows上,它提供以下编译器错误.
error C4244: 'initializing' : conversion from '__int64' to 'int', possible loss of data
如果我更改代码如下,Windows编译器不会出现.
auto count = std::count( stdVector.begin(), stdVector.end(), "element" );
Run Code Online (Sandbox Code Playgroud)
但是现在我在linux上面临以下错误以进行上述更改.
error: ISO C++ forbids declaration of 'count' with no type
我将如何使用std::count哪个将在平台上构建而没有任何错误?
您收到此警告的原因是,在64位版本中,标准容器使用64位值作为大小类型,并且隐式地将64位值(例如size_t)转换为32位值(例如int)可能会丢失数据.
count函数返回的实际数据类型(在本例中std::vector<T>::difference_type为)可能是编译器不支持时使用的最佳类型auto.使用size_t可能也会在没有警告的情况下工作,并且输入要短得多.
或者,如果您没有被数据丢失的风险所困扰(例如,从未计划在容器中拥有超过2 ^ 32-1个对象),您可以简单地抛弃警告:
int count = static_cast<int>( std::count(stdVector.begin(), stdVector.end(), "element") );
Run Code Online (Sandbox Code Playgroud)
在不同的环境中,有两件事可能会发生不同的冲突:
第一个是auto推导类型,它是 C++11 的一项功能。可能是linux编译器默认没有它(只需使用-std=c++11,如果没有,请升级!)
另一个是 std::count 的返回类型是size_t、 not int,并且size_t转换int可能会丢失数据,具体取决于size_t定义方式(至少存在有符号/无符号不匹配,最终两种类型的大小不同,例如32 位int和 64 位size_t)。
| 归档时间: |
|
| 查看次数: |
8337 次 |
| 最近记录: |