mag*_*gu_ 1 c++ gcc type-conversion implicit-conversion c++11
如果我编译以下程序:
#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 %i\n",IntVector[i],Int8Vector[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
与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;
^
Run Code Online (Sandbox Code Playgroud)
所以,如果我理解正确,这意味着编译器将单个值转换uint_8为int?这是因为内存对齐吗?
另一方面,如果我尝试这样的事情:
uint8_t int8Value = 342;
Run Code Online (Sandbox Code Playgroud)
它会向我发出overflow警告并将结果转移.也
printf("%i\n",sizeof(int8Value));
Run Code Online (Sandbox Code Playgroud)
返回预期的1.
我错过了一些明显的东西吗
| 归档时间: |
|
| 查看次数: |
3595 次 |
| 最近记录: |