简而言之,问题是:如果我在空指针上调用no-op函数就是那个UB?
粗略地说,我想创建一个轻量级的类,它根据构建标志变成no-ops。例如:
class RealObject {
void foo() { /* do something real*/ }
};
class DummyObject {
inline void foo() {}
};
#ifdef DO_REAL
RealObject* obj = new Object();
#else
DummyObject* obj = nullptr;
#endif
obj->foo();
我的直觉告诉我,在DummyObject被使用的情况下,它违反了标准中的某些内容(不知道究竟是什么),但由于foo()在实践中是无操作的,它仍然可以按预期工作。
有人可以在这种情况下澄清规则吗?感谢