微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

理解 C++ 中的“通用和统一初始化” 使用统一初始化的优点

如何解决理解 C++ 中的“通用和统一初始化” 使用统一初始化的优点

我正在阅读一本 C++ 书籍,以自学。我正在阅读的这本书讲述了通过类型转换缩小范围。它解释了如何将 double 缩小为 int,并说明“如果您认为转换可能会导致错误值,您应该怎么做?使用 {} 初始值设定项来避免事故。”然后它给出了一个非常有限的示例代码,它几乎没有上下文:

    double x{ 2.7 }; // OK
    int y(x); //error:double -> int might narrow

我尝试运行一些代码,以便了解它是如何工作的,但结果与我预期的不一样:

    double test {1.2};
    cout << "First Line test = " << test << '\n';
    test = 3 / 2;
    cout << "Test = " << test << '\n';

从我读到的内容来看,如果我使用 double test 而不是 {} 版本初始化 =,我会阻止变量 test允许以后缩小为 int

这不是它的工作原理吗?

我已经阅读了关于整数除法herehere内容,但我仍然不清楚。

如果我在 C 语言中工作,我会使用类型转换:

double test = 0.0;
test = (double)3/2;
printf("test = %f",test);

我阅读的印象是,如果我用 C++ 做这件事,它会实现同样的效果

    double test {1.2};
    test = 3 / 2;

解决方法

C++ 中有不同的初始化格式。

int x = 10; // 复制初始化(不太喜欢)

int y = 10; // 值初始化/直接初始化(在新旧 C++ 中都可用)

int z {10}; // 统一初始化/大括号初始化/列表初始化(现代 C++ 自带)

使用统一初始化的优点

  1. 像您提到的那样防止缩小转换。但这并不是使用统一初始化的唯一优势。
  2. 防止Most Vexing Parse .举一个关于最烦人的解析的小例子。当我们使用括号“()”进行初始化时,可能会混淆定义变量和定义函数。如果发生这种情况,编译器会优先考虑该函数。 我希望它对您有用,最好的问候。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。