当我尝试编译这段代码时
struct T
{
unsigned char x;
};
int main()
{
unsigned char a = 10;
unsigned char b = 1;
T t = {a + b};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
错误:在 { } [-Wnarrowing]| 内将 '(((int)a) + ((int)b))' 从 'int' 缩小转换为 'unsigned char'
谁能解释一下为什么?
我的 IT 老师说在 C 和 C++ 中为常量分配空间时只分配严格必要的空间:他说如果我们将值 12 存储在常量中,例如,只会分配 4 位内存. 我相信这不是真的,因为内存几乎总是被分成 8 位“单元”,而且因为当我们声明一个常量时,我们也会指明它的类型,所以我们决定为它分配多少内存。有专家意见吗?
PS:他说的是用const限定符声明的常量。