【发布时间】:2019-02-07 13:41:33
【问题描述】:
我需要消除 gcc -Wconversion 警告。例如
typedef unsigned short uint16_t;
uint16_t a = 1;
uint16_t b = 2;
b += a;
给予
warning: conversion to 'uint16_t {aka short unsigned int}' from 'int' may alter its value [-Wconversion]
b += a;
~~^~~~
我可以消除这个
uint16_t a = 1;
uint16_t b = 2;
b = static_cast<uint16_t>(b + a);
有没有办法保留operator+= 并消除警告?谢谢。
编辑
我用
gcc test.cpp -Wconversion
我的 gcc 版本是
gcc.exe (Rev3, 由 MSYS2 项目构建) 7.2.0
【问题讨论】:
-
请不要同时标记 C 和 C++,只使用您正在编程的语言。对于这样的语义细节,C 和 C++ 之间通常存在差异。
-
typedef unsigned short uint16_t?为什么不#include <cstdint>?后者在我看来更可靠。 -
从技术上讲,编译器的警告是正确的,即使它可能无关紧要(因为编译器不知道运行时会发生什么)。除了关闭
-Wconversion,我真的看不到解决方案。 -
为什么关不掉?它是某个“建筑师”决定必须始终使用它的更大项目的一部分吗?即使它通常会给出比“真实”警告更多的误报?
-
@bencemeszaros 您应该与更高级别的人员进行对话。此警告不适用于一般用途。
标签: c++ integer-promotion