在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#/ .Net的背景下提出.
现在我想学习C++中结构和类之间的区别.请讨论技术差异以及在OO设计中选择其中一个的原因.
我将从一个明显的区别开始:
public:or private:,则结构的成员默认是公共的; 默认情况下,类的成员是私有的.我确信在C++规范的模糊角落中还有其他差异.
这个问题就浮现在我的脑海,当我得知C++与C的背景下,即使有一个 struct为什么斯特劳斯认为有必要引入class关键字?我当时试过问过人,但得不到满意的答复.那么Stack Overflow社区可以回答它吗?
以下代码会产生错误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 age时,struct没有构造函数,析构函数等.但是,现在(C++时代),struct已经扩展得更像类了.
那么,C++设计者的目的是什么?
详细地说,为什么在与c相比时将构造函数,析构函数,继承,成员函数添加到struct中?
这对于C/C++ Struct vs Class来说不是一个重复的问题,因为这里的主要观点在于设计目的,而不是结构和类之间的区别.
它也不重复为什么C++中都存在struct和class?,我没有看到在上述问题下扩展struct的目的.