gpt4 book ai didi

c++ - 我可以检查初始化列表中设置的构造函数主体中的变量吗?

转载 作者:行者123 更新时间:2023-12-02 23:03:40 25 4
gpt4 key购买 nike

我对构造函数的主体在初始化列表的情况下如何工作存有疑问。如果构造函数传递的值不是被承认的值,需要抛出异常,这样的做法是否正确?

Foo(int a_) : a(a_) {
if (a>0)
throw std::invalid_argument("positive value!");
};

在更复杂的情况下,我对如何评估这一点存有疑问。

最佳答案

根据cppreference ,可以绝对安全地假设初始化器列表将在执行构造函数的“主体”之前完成(第 4 项的粗体是我的):

The order of member initializers in the list is irrelevant: the actual order of initialization is as follows

  • 1 If the constructor is for the most-derived class, virtual base classes are initialized in the order in which they appear in depth-first left-to-right traversal of the base class declarations (left-to-right refers to the appearance in base-specifier lists)
  • 2 Then, direct base classes are initialized in left-to-right order as they appear in this class's base-specifier list
  • 3 Then, non-static data members are initialized in order of declaration in the class definition.
  • 4 Finally, the body of the constructor is executed

现在,尽管 cppreference 不是实际标准,但它在此类问题上通常是准确的。

编辑:draft C++14 (§ 12.6.2) standard (该 PDF 第 283-284 页)证实了 cppreference 的陈述。 (是的,我知道 OP 指定了 C++11 - 但我无法在线获得该标准的链接,而且我非常怀疑该标准在11、14 和 17!)

关于c++ - 我可以检查初始化列表中设置的构造函数主体中的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58582900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com