【发布时间】:2017-12-21 23:32:58
【问题描述】:
我想用这个 ASCII 码初始化这个字符向量:
vector <char> a = { 201, 187, 200, 188, 205, 186 };
我在所有 6 个字符中都得到了这个语法错误:
从“int”到“char”的无效缩小转换:常量值不适合目标类型
但是当我使用相同的 ASCII 码初始化单个 char 变量时:
char b = 201;
效果很好。
所以我意识到,在向量中,由于某种原因,char 类型可以接收 int 值,直到 127。从 128 开始出现语法错误。
这与普通变量不同,char 类型可以接收任何 int 值。
我尝试将向量声明为无符号字符,语法错误消失了。
vector <unsigned char> a = { 201, 187, 200, 188, 205, 186 };
不过,
为什么 char 类型向量不能接收与 char 类型变量相同的 int 数据?
我真的很感谢有人向我解释这种行为。
【问题讨论】:
-
如果是常规字符,则不能超过 126。它是否适用于无符号字符?
-
那么为什么“char b=201”有效?
-
它给你一个溢出编译器错误
-
转到你的编译器,在你做
char b=201之后,你应该在下面添加std::cout << "Char c equals 201? " << std::boolalpha << (c == 201) << std::endl;,然后看看你得到的输出 -
此外,下次编译代码时,请确保使用
-pedantic标志。使用该标志会警告您此溢出,您认为这是正常的
标签: c++ vector char int narrowing