gpt4 book ai didi

c++ - 基类中的 typedef 是否在没有完全限定的情况下在继承类中可见?

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:01 26 4
gpt4 key购买 nike

示例

template <typename T>
struct A
{
typedef A<T> super;
};

template <typename T>
struct B : A<T>
{
B() : super() {} // <-- HERE
};

int main()
{
}

使用 MSVC 编译器,可以按原样编译。但是对于 gcc,我需要更改 super()A<T>::super() .我假设 gcc 在这里是正确的,但是有人可以帮助我理解这里的规则以及哪个编译器在技术上是正确的吗?

最佳答案

不,因为它是从属名称,因为 A是一个类模板。您需要完全限定它,或者使用快捷方式 B::super .后者还会告诉编译器它是一个从属名称,如果派生类也有很多模板参数,这将非常方便,因为 B将扩展为 B<T, and, stuff>因为它是注入(inject)的类名

由于其不完整的两阶段查找,MSVC 在这里是错误的。基本上,对于 MSVC,所有依赖项检查和相关内容仅在模板实例化期间发生,而应该在声明时进行检查。

关于c++ - 基类中的 typedef 是否在没有完全限定的情况下在继承类中可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11792328/

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