gcc是否将uint8_t转换为单个值的int ?
Does gcc convert uint8_t to int for single values?
如果我编译以下程序:
#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 -Wconversion
在gcc 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
。
相关文章:
- 为什么我无法更改"set<set>"循环中的值<int>
- C++:将值 int(例如:0x00AAFAD8)转换为指针(指针本身也是 0x00AAFAD8 值)
- 允许对单个值进行隐式转换
- 连接 OpenCV 垫和单个值
- 将大小为编译时常量的数组初始化为单个值
- 线程安全 std::map:锁定整个映射和单个值
- 在C 中,将单个值写入一个非初始化的指针
- 火炬C++:使用 *.data() 获取整数张量的值<int>
- 初始化后来自 valarray 的错误值<int>
- 字符串和布尔值(Int 条件为假)C++
- 擦除C++映射中包含单个值的密钥
- 初学者C++:返回单个值。问题:我的金额四舍五入,我不希望它四舍五入
- 使用单个值初始化std::vector-repeative或push_back()
- 在C++中将所有TLS(线程本地存储)变量设置为新的单个值
- 如何从文本中的数组中打印单个值
- C++ 从链表中返回单个值
- C++使用单个值填充空缓冲区
- 如何向多个进程(但不是所有进程)广播或发送单个值
- 读取构造函数的R列表会引发错误:应为单个值
- gcc是否将uint8_t转换为单个值的int ?