不同目标的C ++转换(编译器)

cod*_*der 4 c++ casting cross-compiling

给定以下内容:

代码链接

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

您可以在此处看到我要投射vector.size()long unsigned int,将其标记为Wandbox(我的链接)上无用的投射,但是在我的linux盒上运行的相同代码没有给出警告-但是如果我这样做,它将给我不同的警告撒它。

我了解这两个unsigned longvs size_t可能会有所不同。但是我想做的是编写一些没有所有强制转换警告的警告的代码(也许在交叉编译时是光敏的)。

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

有没有一种好的方法,这样我就不会在两个编译器上收到警告?

我本来只是要删除该-Wuseless-cast选项,但我想我会看看是否有人有其他想法...

Lig*_*ica 6

我想做的是编写一些没有设置所有强制转换警告的警告的代码(也许在交叉编译时是光敏的)

如果有强制转换,则在交叉编译时比较乐观。

有没有一种好的方法,这样我就不会在两个编译器上收到警告?

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

我本来只是删除-Wuseless-cast选项

那是另一个选择。