c++ - 针对不同目标的 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 long
vssize_t
可以不同。但是我想要做的是编写一些没有警告的代码,并且设置了所有强制转换警告(也许这在交叉编译时是最理想的)。
所以,一个编译器抱怨我正在转换类型,所以我进行了转换,但是另一个编译器抱怨无用的转换-所以我删除了转换-然后我们开始了:(
有没有一种好的方法可以让我在任何一个编译器上都不会收到警告?
我打算删除该-Wuseless-cast
选项,但我想我会看看是否有人有其他想法......
解决方案
我想要做的是编写一些没有警告的代码,所有的强制转换警告集(也许这在交叉编译时是最理想的)
如果你有演员表,交叉编译是乐观的。
有没有一种好的方法可以让我在任何一个编译器上都不会收到警告?
没有演员表。使您的变量为 type std::size_t
。
我打算删除该
-Wuseless-cast
选项
那是另一种选择。
推荐阅读
- javascript - 为什么我的 Websocket Server 需要手动刷新?
- c - 为什么这个程序打印 0 而不是指定数组中的特定值集?
- vba - 在循环发送之前显示每封电子邮件以进行手动编辑
- java - Android Google Maps API 未加载地图
- r - 时间序列图 ggplot
- c# - 带有数组模型的 Bootstrap Vue B-Checkbox 的 Blazor 实现
- css - 如何在 React 中运行微调器时使背景变灰
- bash - 为什么 AWS cli 被一个 bash 脚本看到,而另一个却没有?
- go - 减少多路复用中间件和自定义上下文实现中的样板
- python - 试图查看 N 及其 2N 是否存在于列表中