gpt4 book ai didi

c++ - 为什么 C++ 模板参数应该声明为类类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:56 26 4
gpt4 key购买 nike

函数模板语法

template <**class** T, ...>
returntype functionname(arguments)
{
.....
.....
}

我有两个问题?

  1. 为什么要将模板参数声明为类类型?(即使用类关键字)
  2. 当我们将其声明为类类型时,编译器会做什么会怎样?

最佳答案

这是在 template 参数中使用 class 引起的常见混淆。

class 与类无关;它只是说模板接受一个类型模板参数(而不是整数1 模板参数),它可以是任何类型,而不仅仅是类。

那么,他们为什么选择class?因为他们必须使用一个肯定不会在任何 C++ 程序中使用的关键字,并且或多或少“听起来不错”- class 没问题,因为它已经是 C++ 中的保留关键字。

请注意,class 有一个替代方法:typename 关键字。它们是完全等价的2,但在我看来typename要清楚得多,因为这个名字只是说“后面是一个类型参数”,而不是让你认为它必须是一个类。

为什么两种语法都被允许?因为 typename 关键字确实在后来 语言中引入了(当他们注意到有必要添加另一个关键字来消除模板内的某些声明的歧义时);然后,它也被“改造”为 template 参数声明。保留 class 关键字的这种用法是为了与同时编写的程序/文档兼容。


  1. 为了简单起见,我在这里说“整体”,显然我指的是一般的非类型模板参数(C++11,§14.1 ¶4)。
  2. There is no semantic difference between class and typename in a template-parameter.

    (C++11,§14.1 ¶2)

关于c++ - 为什么 C++ 模板参数应该声明为类类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10268523/

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