繁体   English   中英

了解 C++ 中的“通用和统一初始化”

[英]Understanding “universal and uniform Initialization” in 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

这不是它的工作原理吗?

我已经阅读了这里这里提到的关于integer 部门的内容,但对我来说仍然不清楚。

如果我在 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. 防止烦人的解析。举一个关于最烦人的解析的小例子。 当我们使用括号“()”进行初始化时,可能会在定义变量和定义函数之间产生混淆。 如果发生这种情况,编译器会优先考虑 function。 我希望它对你有用,最好的问候。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM