gcc是否将uint8_t转换为单个值的int ?

Does gcc convert uint8_t to int for single values?

本文关键字:单个值 int 转换 是否 uint8 gcc      更新时间:2023-10-16

如果我编译以下程序:

#include <vector>
#include <cstdint>
#include <stdio.h>
int main() {
    constexpr std::size_t N = 10;
    uint8_t int8Value = 42;
    std::vector<int> IntVector(N, 0);
    for (int & ele:IntVector) {
        ele += int8Value;
    }
    std::vector<uint8_t> Int8Vector(N, 0);
    for (uint8_t & ele:Int8Vector) {
        ele += int8Value;
    }
    for (std::size_t i = 0; i < N; i++) {
        printf("%i %in",IntVector[i],Int8Vector[i]);
    }
}

如果g++ test.cpp -o test -std=c++11 -Wconversiongcc 4.9上,它会发出以下警告:

test.cpp: In function ‘int main()’:
test.cpp:16:7: warning: conversion to ‘uint8_t {aka unsigned char}’ from ‘int’ may alter its value [-Wconversion]
ele += int8Value;
   ^

所以如果我理解正确,这意味着编译器将uint_8的单个值转换为int ?这是因为内存对齐吗?

另一方面,如果我尝试这样写:

uint8_t int8Value = 342;

抛出overflow警告并跳转结果。还

printf("%in",sizeof(int8Value));

返回期望的1

我错过了什么明显的吗?

是,算术表达式导致转换为int