<分区>
在构造函数中,允许调用非虚拟成员函数。
根据这个事实是否可以得出以下代码段是明确定义的?
struct A {
void foo { std::cout << "Hi there! My address is: " << this; }
};
A * a = nullptr;
a->foo ();
回答?
借助评论中给出的一些链接以及链接页面中给出的链接,我现在认为可以找到答案,例如在
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3035.pdf
§3.8 标准杆。 5,页。 66:
“在对象的生命周期开始之前,但在分配对象将占用的存储之后...... [t]程序具有未定义的行为 如果 [...] 指针用于访问非静态数据成员或调用对象的非静态成员函数"
那么如果根本没有分配存储就调用一个成员函数应该更未定义。
我想这里解释了为什么将其设为未定义是个好主意的一个重要原因:https://stackoverflow.com/a/3257755/1419315