gpt4 book ai didi

c++ - 可以在 C++ 中使用子类名来引用方法吗?

转载 作者:行者123 更新时间:2023-12-04 11:03:05 25 4
gpt4 key购买 nike

请考虑结构 A用方法f , 和一个继承的结构 B ,它不会重新定义 f .在这种情况下 B::f指与A::f相同的方法.
是否允许调用方法fA对象使用 B::f名称如下例所示?

struct A { void f() {} };
struct B : A {};
int main() { A{}.B::f(); }
Clang 和 GCC 在这里分歧。 Clang 对程序很好,而 GCC 打印错误:
error: 'B' is not a base of 'A'
演示: https://gcc.godbolt.org/z/Pn7jehzdP
根据标准,哪个编译器在这里?

最佳答案

海合会 是正确的:[class.access.base]/6 需要指向 . 左侧操作数的指针能够成为

implicitly converted to a pointer to the naming class of the right operand.


术语“命名类”在 [class.access.general]/5 中定义;在您的示例中,它是 B ,显然是 A*不能是 隐含 转换为 B* .
对于这种没有非公共(public)成员或继承的特殊情况,规则的放置是违反直觉的。

关于c++ - 可以在 C++ 中使用子类名来引用方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68926118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com