C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 为什么gcc警告只为统一初始化缩小转换?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图将长类型变量转换为具有 uniform initialization的int类型变量,没有它.但是我只能通过统一初始化获得编译器警告.这是为什么?为什么gcc不警告两种情况?我也尝试过clang并得到了类似的结果.

这是代码

#include <iostream>

int main() {
    long l = 1;
    int i1 = l;
    int i2 = { l };

    std::cout << i1 << std::endl;
    std::cout << i2 << std::endl;

    return 0;
}

我得到的唯一@L_675_2@警告

$g++ -Wall -Wextra 1.cpp
1.cpp: In function ‘int main()’:
1.cpp:6:16: warning: narrowing conversion of ‘l’ from ‘long int’ to ‘int’ inside { } [-Wnarrowing]
   int i2 = { l };

解决方法

@H_489_19@ 因为标准说,narrowing conversions limit仅指定列表初始化(自C 11起).

对于其他初始化方法(使用括号或等号),不应用(添加)缩小转换限制规则;因为这可能会破坏很多遗留代码.

大佬总结

以上是大佬教程为你收集整理的c – 为什么gcc警告只为统一初始化缩小转换?全部内容,希望文章能够帮你解决c – 为什么gcc警告只为统一初始化缩小转换?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。