10

以下构造的实际效果是什么:

class Base { /* ... */ };

template<class T>
class Derived : public T { /* ... */ };

int main() {
    Derived<const Base> d;
    // ...
}

该类是否Derived只能访问const接口的 - 部分Base?我的第一次测试表明实际上根本没有效果。为什么?

谢谢!

4

1 回答 1

2

我的猜测是const被忽略了,因为如果你尝试写

class Derived : public const Base

该程序无法编译

编辑:

freezekoi在评论中给出了标准的相关部分:

“命名类类型或其 cv 限定版本的 typedef-name (7.1.3) 也是类名。如果使用命名 cv 限定类类型的 typedef-name,其中 class- name 是必需的,忽略 cv 限定符。typedef-name 不应用作类头中的标识符。§9.1

于 2013-03-23T08:00:45.747 回答