const基类的效果

phl*_*psy 9 c++ const derived-class

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

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

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

int main() {
    Derived<const Base> d;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

ale*_*nis 2

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

\n\n
class Derived : public const Base\n
Run Code Online (Sandbox Code Playgroud)\n\n

该程序无法编译

\n\n

编辑:

\n\n

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

\n\n
\n

“命名类类型或其 cv 限定版本的 typedef-name (7.1.3) 也是类名。如果使用命名 cv 限定类类型的 typedef-name,其中类- name 是必需的,cv 限定符被忽略。typedef-name 不得用作类头中的标识符。” \xc2\xa79.1

\n
\n

  • 我认为在这种情况下,规范中的相关部分是“命名类类型或其 cv 限定版本的 typedef-name (7.1.3) 也是类名。如果命名的 typedef-name在需要类名的地方使用 cv 限定的类类型,cv 限定符将被忽略。 typedef 名称不得用作类头中的标识符。§9.1(我有一个草稿版本,可能不准确) (4认同)