在基础初始化未定义的行为之前,是否在构造期间评估静态成员函数?

时间:2017-09-29 11:52:42

标签: c++ initialization language-lawyer undefined-behavior

我想知道这个例子是否会引起未定义的行为:

struct Base
  {
  Base(int);
  };
struct Derived
  :Base
  {
  static int a_static_function();

  Derived()
    :Base(a_static_function())//is it undefined behavior?
    {}
  };
编辑:我问的是因为C ++标准中的这一段[class.base.init]:

  

可以为正在构建的对象调用成员函数(包括虚拟成员函数,13.3)。   类似地,正在构造的对象可以是typeid运算符(8.2.8)或dynamic_-的操作数。   演员(8.2.7)。但是,如果这些操作是在ctor-initializer(或直接调用的函数)中执行的   或者在基类的所有mem-initializer完成之前,间接来自ctor-initializer)   程序有不确定的行为。

它似乎不是特定于非静态成员函数。

1 个答案:

答案 0 :(得分:2)

不,不是UB。

静态成员函数类似于普通(非成员)函数,除了它可以访问private内容(例如,私有静态数据和其他静态成员函数)。

我对你对标准的引用的理解是它适用于非静态成员函数。