只要用于访问指向成员的指针的指针是正确类型,以下内容是否会导致未定义行为?
如果是这样,为什么需要强制转换?没有它会更漂亮(是的,我知道这只是个人观点)。
如果是这样,为什么需要强制转换?没有它会更漂亮(是的,我知道这只是个人观点)。
struct base {
int foo(int base::* ptr) {
return this->*ptr;
}
};
struct sub : base {
int blah{ 42 };
};
int main() {
return sub{}.foo(static_cast<int base::*>(&sub::blah));
}
int
成员的对象上调用foo
,所以不要这样做。换句话说,知道它不是正式UB,如果它不是,对于真正的问题——类型不安全性并没有帮助,因此UB或不UB都相当无关紧要,除了作为语言律师问题(但如果这是您的兴趣,请考虑将问题标记为此类问题)。你试图通过这种方式解决什么问题? - Cheers and hth. - Alf