加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用int值初始化向量

发布时间:2020-12-16 10:14:30 所属栏目:百科 来源:网络整理
导读:我想用这个ASCII码初始化这个char向量: vector char a = { 201,187,200,188,205,186 }; 我在所有6个字符中都会出现此语法错误: Invalid narrowing convertion from “int” to “char”: constant value does not fit in destination type 但是当我使用相
我想用这个ASCII码初始化这个char向量:

vector <char> a = { 201,187,200,188,205,186 };

我在所有6个字符中都会出现此语法错误:

Invalid narrowing convertion from “int” to “char”: constant value does not fit in destination type

但是当我使用相同的ASCII代码初始化单个char变量时:

char b = 201;

它工作正常.

所以我意识到在向量中,由于某种原因,char类型可以接收int值直到127.从128开始出现语法错误.

这与普通变量不同,当char类型可以接收任何int值时.

我尝试将向量声明为unsigned char,语法错误消失.

vector <unsigned char> a = { 201,186 };

但是,

为什么char类型向量不能接收与char类型变量相同的int数据?

我真的很感激有人向我解释这种行为.

解决方法

有两件事情在发生.

1
第一个是char类型的默认值范围,它是实现定义的.在大多数主要编译器中,默认值为[-128,127]. (奇怪的是,这与签名的char,JSYK不一样!)

MSVC和GCC都提供了将char视为有符号或无符号的选项.您可以这样做以全局解决问题.

但更好的是,不要假设char处理范围之外的任何东西[0,127].使用signed char或unsigned char是特定的.

2
第二个是您正在使用brace initialization,这要求检查文字元素值是否适合范围.

对于你的例子:

std::vector <char> xs = { 201,202 };  // compiler error

char x { 201 };  // compiler error

char x = 201;  // compiler warning

如果你没有编译器的错误级别(你应该),那么编译器将默默地忽略该警告并分配值,即使它在技术上是无效的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读