【问题标题】:Why can't I use uniform initialization when I want to override a value?当我想覆盖一个值时,为什么不能使用统一初始化?
【发布时间】:2020-05-13 17:22:20
【问题描述】:
bool a{ false };

现在我创建了一个布尔变量,但如果我想这样做:

a { false };
a = false;

第一种方法不行,是什么原因?

【问题讨论】:

  • 因为你没有在那个表达式中初始化 a。在最后一个表达式中,您正在分配。
  • 因为当你“覆盖”它时,你不再初始化它了!只能初始化一次。

标签: c++


【解决方案1】:

您只能在创建对象时进行统一初始化(或任何形式的初始化)。对象初始化后,只能修改:

bool a{false}; // brace initialization
bool b = false; // copy initialization

// a and b are created now, and can't be initialized again

a {false}; // not valid syntax
b = false; // assignment, NOT initialization

【讨论】:

  • @Ayxan - 不,它仍然被分配。您的示例将其默认初始化(具有不确定的值)。
  • @Ayxan - 我们没有。不是在学究气的时候说话。通俗地说,它是未初始化的。但在 C++ 模型中,没有任何对象未经初始化(即使所述初始化是空操作)。
  • @Ayxan - 我认为 cppreference 有关于 C++ 中各种初​​始化类型的好文章。您也可以从 eel.is/c++draft/basic.life#1 开始 - 但钻研 [dcl.init] 不适合胆小的人。
  • @Ayxan - 这实际上是很长一段时间内的 50,000 美元问题。最近通过wg21.link/p0593 解决了这个问题
猜你喜欢
  • 1970-01-01
  • 2012-05-17
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 2022-06-10
相关资源
最近更新 更多