使用代码:
我认为问题与位运算的整数提升有关,但在第二个函数d()中,我首先将其赋值给一个变量,然后就没有警告了。(clang不会警告,只有g++会)
这可以通过强制转换而不是变量赋值来解决吗?
为什么在使用函数时行为会有所不同?
带上以上代码的编译器探索链接: https://godbolt.org/z/q9eMVT
#include <cstdint>
uint8_t a() { return 5; }
auto b() {
uint8_t c = 6;
c |= a(); // Warning here
return c;
}
auto d() {
uint8_t c = 6;
uint8_t d = a();
c |= d;
return c;
}
警告(使用-Wconversion):
<source>:7:12: warning: conversion from 'int' to 'uint8_t' {aka 'unsigned char'} may change value [-Wconversion]
我认为问题与位运算的整数提升有关,但在第二个函数d()中,我首先将其赋值给一个变量,然后就没有警告了。(clang不会警告,只有g++会)
这可以通过强制转换而不是变量赋值来解决吗?
为什么在使用函数时行为会有所不同?
带上以上代码的编译器探索链接: https://godbolt.org/z/q9eMVT
c = c | a;
时,同样的gcc不会发出警告。 - SergeyA