首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解C++中的“通用统一初始化”

理解C++中的“通用统一初始化”
EN

Stack Overflow用户
提问于 2021-02-28 19:42:49
回答 1查看 431关注 0票数 1

我正在写一本C++的书,教我自己。我正在研究的这本书谈到了如何通过类型转换来缩小范围。它解释了如何将double缩小为int,并说:“如果您认为转换可能导致一个坏值,您应该做什么?使用{}初始值来避免意外。”然后,它给出一个非常有限的示例代码,并且它几乎没有上下文:

代码语言:javascript
复制
    double x{ 2.7 }; // OK
    int y(x); //error:double -> int might narrow

我试着运行一些代码,这样我就可以看到它是如何工作的,但是我的结果与我所期望的不一样:

代码语言:javascript
复制
    double test {1.2};
    cout << "First Line test = " << test << '\n';
    test = 3 / 2;
    cout << "Test = " << test << '\n';

从我所读到的情况来看,如果我用double test而不是=版本初始化{},那么我的印象是,我将阻止变量test稍后被缩小为一个int

不是这样的吗?

我读过关于整数除法的这里这里,但对我来说还不清楚。

如果我在C中工作,我会使用类型铸造:

代码语言:javascript
复制
double test = 0.0;
test = (double)3/2;
printf("test = %f", test);

我从阅读中得到的印象是,如果我在C++中这样做,它将完成同样的任务:

代码语言:javascript
复制
    double test {1.2};
    test = 3 / 2;
EN

回答 1

Stack Overflow用户

发布于 2021-03-08 07:47:55

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

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

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

int z {10}; // Uniform初始化/ Brace初始化/列表初始化(随现代C++一起提供)

使用均匀初始化的优点

  1. 防止缩小转换,就像您mentioned.But一样,这不是使用统一初始化的唯一优点。
  2. 最令人烦恼的Parse .To给出了一个关于最令人烦恼的解析的小例子。当我们使用括号"()“进行初始化时,在定义变量和定义函数之间可能会出现混淆。如果发生这种情况,编译器将优先处理该函数。我希望这对你有帮助,致以最良好的问候。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66413184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档