c++ - Boost mpi x64 警告 "size_t to int"

标签 c++ boost mpi

我已经成功地使用 mpi 构建了 Boost,但是我在 x64 平台下使用 boost mpi 时收到了很多警告。我正在使用 Boost 1.59.0 + vs2015。请帮助我摆脱这些警告

这是我的测试代码。

#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <iostream>

namespace mpi = boost::mpi;

int main(int argc, char* argv[]) {
    mpi::environment env(argc, argv);
    mpi::communicator world;

    std::cout << "I am process " << world.rank() << " of " << world.size()
        << "." << std::endl;
    return 0;
}

一些警告看起来像这样:

1>d:\dependencies\boost_1_59_0\boost\mpi\detail\mpi_datatype_primitive.hpp(61) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\mpi_datatype_primitive.hpp(80) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_iprimitive.hpp(62) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_iprimitive.hpp(106) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\binary_buffer_iprimitive.hpp(64) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_oprimitive.hpp(52) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_oprimitive.hpp(96) : warning C4267 : “初始化” : conversion from 'size_t' to 'int', possible loss of data
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\packed_oprimitive.hpp(100) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\binary_buffer_oprimitive.hpp(53) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data
1>d:\dependencies\boost_1_59_0\boost\mpi\detail\binary_buffer_oprimitive.hpp(87) : warning C4267 : 'argument' : conversion from 'size_t' to 'int', possible loss of data
1>  d:\dependencies\boost_1_59_0\boost\archive\detail\oserializer.hpp(88) : note : see reference to function template instantiation'void boost::mpi::binary_buffer_oprimitive::save<char>(const std::basic_string<char, std::char_traits<char>, std::allocator<char>> &)'
1>  d:\dependencies\boost_1_59_0\boost\archive\detail\oserializer.hpp(232) : note : see reference to function template instantiation 'void boost::archive::save_access::save_primitive<Archive, T>(Archive &, const T &)'
1>          with
1>[
1>              Archive = boost::mpi::packed_oarchive,
1>              T = std::string
1>]

最佳答案

恕我直言,MSVC C4267 警告过于敏感。它甚至在将 int 转换为 double 时弹出。但是,在这种情况下,它可能是有效的,正如@sjsam 评论的那样。

当我确信转换有效时,我经常使用以下方法在本地禁用警告:

#ifdef _MSC_VER
#pragma warning( push )
#pragma warning( disable : 4244 ) // implicit conversion, possible loss of data
#endif

在代码之前,并使用以下方法重新启用它:

#ifdef _MSC_VER
#pragma warning( pop )
#endif

如果您确信boost::mpi值永远不会超过 std::numeric_limits<int>::max()然后把它们放在周围:

#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>

因此您可以禁用 boost::mpi 的 C4267 警告仅。

关于c++ - Boost mpi x64 警告 "size_t to int",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36668037/

相关文章:

boost - Boost::Spirit 解析规则中的复合属性生成

c++ - 如何使用 zlib 支持构建 boost?

c - 在 MPI 中的所有节点之间同时传递消息

c++ - "#include <sndfile.h>"是什么意思?

c++ - 如何判断数组元素的类型?

c++ - 在 "Modern C++ Design"/Loki 中找到的小对象分配器是否已被弃用以支持更新的实现?

python - 如何(/if)使用 dask 转置分布式 3D numpy 数组?

c - 如何使用 MPI 中的标志打破所有进程中的循环?

c++ - 如何混合语音音频

c++ - 在析构函数上自动安全地清除 C++ std::string 和 std::vector 的内容