首页 > 解决方案 > 针对不同目标的 c++ 强制转换(编译器)

问题描述

鉴于以下情况:

代码链接

为了方便起见,这是代码本身(我不确定我的链接是否有效):

#include <iostream>
#include <vector>
#include <stdint.h>

using namespace std;

int main()
{
    cout<<"Hello World";
    std::vector<std::string> test_vect {"1", "2"};
    long unsigned int size = static_cast<long unsigned int>(test_vect.size());

    std::cout << "size: " << size << std::endl;
    return 0;
}

以及以下编译选项:g++ file.c -Wall -Wextra "-Werror" "-Wuseless-cast"

你可以在这里看到我正在投射vector.size(),这在 Wandbox(我的链接)上被标记为无用的投射,但是在我的 linux 机器上运行的相同代码不会发出警告 - 但如果我long unsigned int这样做,它会给我一个不同的警告投它。

我知道这两个unsigned longvssize_t可以不同。但是我想要做的是编写一些没有警告的代码,并且设置了所有强制转换警告(也许这在交叉编译时是最理想的)。

所以,一个编译器抱怨我正在转换类型,所以我进行了转换,但是另一个编译器抱怨无用的转换-所以我删除了转换-然后我们开始了:(

有没有一种好的方法可以让我在任何一个编译器上都不会收到警告?

我打算删除该-Wuseless-cast选项,但我想我会看看是否有人有其他想法......

标签: c++castingcross-compiling

解决方案


我想要做的是编写一些没有警告的代码,所有的强制转换警告集(也许这在交叉编译时是最理想的)

如果你有演员表,交叉编译是乐观的。

有没有一种好的方法可以让我在任何一个编译器上都不会收到警告?

没有演员表。使您的变量为 type std::size_t

我打算删除该-Wuseless-cast选项

那是另一种选择。


推荐阅读