相关疑难解决方法(0)

使用'class'或'typename'作为模板参数?

可能重复:
模板中关键字'typename'和'class'的C++差异

在C++中定义函数模板或类模板时,可以这样写:

template <class T> ...
Run Code Online (Sandbox Code Playgroud)

或者可以这样写:

template <typename T> ...
Run Code Online (Sandbox Code Playgroud)

是否有充分理由偏好一个而不是另一个?


我接受了最受欢迎(也很有趣)的答案,但真正的答案似乎是"不,没有理由偏爱另一个."

  • 它们是等价的(除非如下所述).
  • 有些人有理由一直使用typename.
  • 有些人有理由一直使用class.
  • 有些人有理由同时使用这两种方法.
  • 有些人并不关心他们使用哪一个.

但是,请注意,在模板模板参数的情况下,需要使用class而不是typename.请参阅下面的user1428839的答案.(但这个特殊情况不是偏好问题,而是语言的要求.)(这也会改变typename)

c++ templates

572
推荐指数
8
解决办法
26万
查看次数

C++中struct和class之间有什么区别?

这个问题已在C#/ .Net的背景下提出.

现在我想学习C++中结构和类之间的区别.请讨论技术差异以及在OO设计中选择其中一个的原因.

我将从一个明显的区别开始:

  • 如果您没有指定public:or private:,则结构的成员默认是公共的; 默认情况下,类的成员是私有的.

我确信在C++规范的模糊角落中还有其他差异.

c++ oop struct class c++-faq

427
推荐指数
11
解决办法
34万
查看次数

为什么C++中有一个class关键字?

这个问题就浮现在我的脑海,当我得知C++与C的背景下,即使有一个 struct为什么斯特劳斯认为有必要引入class关键字?我当时试过问过人,但得不到满意的答复.那么Stack Overflow社区可以回答它吗?

c++

12
推荐指数
3
解决办法
1777
查看次数

为什么模板定义中不允许使用结构?

以下代码会产生错误error: ‘struct Foo’ is not a valid type for a template constant parameter:

template <struct Foo>
struct Bar {

};
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

template <class Foo>
struct Bar {

};
Run Code Online (Sandbox Code Playgroud)

工作得很好,甚至接受一个结构作为参数.

c++ templates

4
推荐指数
1
解决办法
2350
查看次数

为什么结构设计要扩展,导致它像课堂一样?

换句话说,在旧时代,当谈到C age时,struct没有构造函数,析构函数等.但是,现在(C++时代),struct已经扩展得更像类了.

那么,C++设计者的目的是什么?

详细地说,为什么在与c相比时将构造函数,析构函数,继承,成员函数添加到struct中?

这对于C/C++ Struct vs Class来说不是一个重复的问题,因为这里的主要观点在于设计目的,而不是结构和类之间的区别.

它也不重复为什么C++中都存在struct和class?,我没有看到在上述问题下扩展struct的目的.

c c++

2
推荐指数
1
解决办法
178
查看次数

标签 统计

c++ ×5

templates ×2

c ×1

c++-faq ×1

class ×1

oop ×1

struct ×1