c++11类型收窄错误

Enter空格 2016-07-29 03:31:50
想在项目里使用c++11特性,
于是升级gcc到5.1,开启std=c++11
以前的老代码有大量的,类似这种代码,现在碰到c++11的规范,不允许类型收窄赋值。
char kEncryptionKey[] = { 0xC1,0xEC,0x48};

现在报错


请问这个该怎么破。
难道要老代码挨个改成
unsigned char kEncryptionKey[] = { 0xC1,0xEC,0x48};
吗?
那万一kEncryptionKey里同时有正负数怎么办?
...全文
273 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 11 楼 mymixing 的回复:
[quote=引用 8 楼 akirya 的回复:] [quote=引用 6 楼 mymixing 的回复:] 唉~~改了一些地方,碰到个麻烦事了。 以前的代码用string装数据,但string是这样声明的
typedef basic_string<char, char_traits<char>, allocator<char> > string;
然后现在数据都改成unsigned char,又是个问题。 改这个又是个麻烦事。。 真是恶心。 这11这个规定一下来,太多数据不兼容啊。。
刚发现有这个 -Wno-narrowing [/quote] 貌似没什么方法改正呢,只能改老代码,好多地方。 然后发现改完的老代码,用老版本编译器,同样不兼容。。 c++11用来编译老代码真是惆怅啊。。。[/quote] 那个版本的编译器? 我这边用g++5.3 6.1 加上 -Wno-narrowing 都可以编译通过的
Enter空格 2016-08-02
  • 打赏
  • 举报
回复
引用 10 楼 ri_aje 的回复:
basic_string 是模版,也可以用 unsigned char 实例化。话说如果是装东西用,本来就应该用 vector。楼主处理的代码库质量有点差,赶上 c++11 这种查的紧的就苦逼了。
要想用c++11,貌似只能改动老代码了。 这代码改完之后,以前的编译器又错误。。 愁,以后新写的东西,还是应该直接用11标准来编译。
Enter空格 2016-08-02
  • 打赏
  • 举报
回复
引用 9 楼 sdghchj 的回复:
这意思是把4字节int赋给了1字节的char,有数据丢失,这个是跟编译器的报错级别有关,一般是警告而已。改为unsigned char不还是1字节么?能解决问题?
呃,这是c++11的标准。
Enter空格 2016-08-02
  • 打赏
  • 举报
回复
引用 8 楼 akirya 的回复:
[quote=引用 6 楼 mymixing 的回复:] 唉~~改了一些地方,碰到个麻烦事了。 以前的代码用string装数据,但string是这样声明的
typedef basic_string<char, char_traits<char>, allocator<char> > string;
然后现在数据都改成unsigned char,又是个问题。 改这个又是个麻烦事。。 真是恶心。 这11这个规定一下来,太多数据不兼容啊。。
刚发现有这个 -Wno-narrowing [/quote] 貌似没什么方法改正呢,只能改老代码,好多地方。 然后发现改完的老代码,用老版本编译器,同样不兼容。。 c++11用来编译老代码真是惆怅啊。。。
Enter空格 2016-08-02
  • 打赏
  • 举报
回复
引用 16 楼 mLee79 的回复:
你这个只是没有连接 stdc++, 编译已经成功了啊... 你应该 g++ -W..... main.cpp 或者 gcc -W ..... main.cpp -lstdc++
呃gcc用的不熟,大意了3q
mLee79 2016-08-02
  • 打赏
  • 举报
回复
你这个只是没有连接 stdc++, 编译已经成功了啊... 你应该 g++ -W..... main.cpp 或者 gcc -W ..... main.cpp -lstdc++
Enter空格 2016-08-02
  • 打赏
  • 举报
回复
引用 14 楼 akirya 的回复:
[quote=引用 11 楼 mymixing 的回复:]
[quote=引用 8 楼 akirya 的回复:]
[quote=引用 6 楼 mymixing 的回复:]
唉~~改了一些地方,碰到个麻烦事了。
以前的代码用string装数据,但string是这样声明的
typedef basic_string<char, char_traits<char>, allocator<char> > string;

然后现在数据都改成unsigned char,又是个问题。
改这个又是个麻烦事。。
真是恶心。
这11这个规定一下来,太多数据不兼容啊。。

刚发现有这个 -Wno-narrowing [/quote]
貌似没什么方法改正呢,只能改老代码,好多地方。
然后发现改完的老代码,用老版本编译器,同样不兼容。。
c++11用来编译老代码真是惆怅啊。。。[/quote]
那个版本的编译器?
我这边用g++5.3 6.1 加上 -Wno-narrowing 都可以编译通过的[/quote]
谢谢,请问这个是怎么加的?
我是这样加的。

本来报错是不允许收窄
一加这个 -Wno-narrowing 就这样了
ri_aje 2016-07-29
  • 打赏
  • 举报
回复
basic_string 是模版,也可以用 unsigned char 实例化。话说如果是装东西用,本来就应该用 vector。楼主处理的代码库质量有点差,赶上 c++11 这种查的紧的就苦逼了。
sdghchj 2016-07-29
  • 打赏
  • 举报
回复
这意思是把4字节int赋给了1字节的char,有数据丢失,这个是跟编译器的报错级别有关,一般是警告而已。改为unsigned char不还是1字节么?能解决问题?
  • 打赏
  • 举报
回复
引用 6 楼 mymixing 的回复:
唉~~改了一些地方,碰到个麻烦事了。 以前的代码用string装数据,但string是这样声明的
typedef basic_string<char, char_traits<char>, allocator<char> > string;
然后现在数据都改成unsigned char,又是个问题。 改这个又是个麻烦事。。 真是恶心。 这11这个规定一下来,太多数据不兼容啊。。
刚发现有这个 -Wno-narrowing
Enter空格 2016-07-29
  • 打赏
  • 举报
回复
。。。C++11自己用还没什么,感觉挺好的。 没想到和以前老项目这么不兼容。
Enter空格 2016-07-29
  • 打赏
  • 举报
回复
唉~~改了一些地方,碰到个麻烦事了。 以前的代码用string装数据,但string是这样声明的
typedef basic_string<char, char_traits<char>, allocator<char> > string;
然后现在数据都改成unsigned char,又是个问题。 改这个又是个麻烦事。。 真是恶心。 这11这个规定一下来,太多数据不兼容啊。。
  • 打赏
  • 举报
回复
引用 2 楼 mymixing 的回复:
[quote=引用 1 楼 akirya 的回复:] 呃 这种情况俺都是直接定义成unsigned char的。
呃,这代码都是以前别人写的,还有第三方库,也有类似的情况。 都触犯了类型收窄,难道我要用c++11,只能一个一个去手动改成unsigned char这种形式? 我意思有木有关闭类型收窄这一特性的选项啊。。[/quote] 没有,初始化列表,是禁止收窄的。
lm_whales 2016-07-29
  • 打赏
  • 举报
回复
因为涉及初始化表,所以才会这样 看来,只有手动修改代码了,,,或者替换
lm_whales 2016-07-29
  • 打赏
  • 举报
回复
这应该是警告吧,这是把错误级别收紧了吧
Enter空格 2016-07-29
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
呃 这种情况俺都是直接定义成unsigned char的。
呃,这代码都是以前别人写的,还有第三方库,也有类似的情况。 都触犯了类型收窄,难道我要用c++11,只能一个一个去手动改成unsigned char这种形式? 我意思有木有关闭类型收窄这一特性的选项啊。。
  • 打赏
  • 举报
回复
呃 这种情况俺都是直接定义成unsigned char的。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧