我想知道这个例子是否会引起未定义的行为:
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) 程序有不确定的行为。
它似乎不是特定于非静态成员函数。
答案 0 :(得分:2)
不,不是UB。
静态成员函数类似于普通(非成员)函数,除了它可以访问private
内容(例如,私有静态数据和其他静态成员函数)。
我对你对标准的引用的理解是它适用于非静态成员函数。