typename关键字是否存在于C++;,向后兼容“;C模板&x201D; 我正在学习C++类,老师在文章中提到, Type NeX//Cord>关键字存在于C++中(与模板声明中使用类/代码>关键字相反),与“C模板”的向后兼容性
这让我大吃一惊。我从来没有见过或听说过任何关于C++的模板(除了,也许,预处理器……这在ANSI C中不是真正的事情),那么,我是不是错过了什么地方,或者这是一个真正的深奥的扩展,是由代码> GCC < /代码>还是我的老师偏离了?ANSI C不支持模板typename关键字是否存在于C++;,向后兼容“;C模板&x201D; 我正在学习C++类,老师在文章中提到, Type NeX//Cord>关键字存在于C++中(与模板声明中使用类/代码>关键字相反),与“C模板”的向后兼容性,c++,c,templates,standards,C++,C,Templates,Standards,这让我大吃一惊。我从来没有见过或听说过任何关于C++的模板(除了,也许,预处理器……这在ANSI C中不是真正的事情),那么,我是不是错过了什么地方,或者这是一个真正的深奥的扩展,是由代码> GCC < /代码>还是我的老师偏离了?ANSI C不支持模板 我认为你的老师太离谱了 参见C++支持这两个原因的真正原因。 这似乎不对。typename在C中根本不是保留字 也许他们说错了/记错了,想的是“带类的C”。不,没有C模板这样的东西typename在C语言中甚至不是一个关键词。你的老师在编故事。
我认为你的老师太离谱了
参见C++支持这两个原因的真正原因。
这似乎不对。typename在C中根本不是保留字也许他们说错了/记错了,想的是“带类的C”。不,没有C模板这样的东西
typename
在C语言中甚至不是一个关键词。你的老师在编故事。C中没有模板这类东西。typename
关键字的存在有两个原因:
template
比template
更有意义,因为T
可以是非类类型,如int
或double
A::B*foo代码>。这是声明一个名为foo
的变量,还是一个乘法表达式?(回答:它被解析为后者。要使它成为一个声明,请编写typename a::B*foo;
,它告诉编译器将a::B
解释为类型名,而不是变量名。)
请参阅以获取详细解释。也许您的老师想要表达的意思是“…为了与C类型的向后兼容性”,也就是说,当
T
是C样式的内置类型,例如char
或int
时,认识到模板
具有误导性的问题,正如其他人所说的那样。但那不是一门课!:-)
不久前,一些GCC人员认为,将模板机制提供给C编译器将是实现C99的
的一个好方法,但这似乎没有任何意义。我想说的是,C确实没有本地模板的东西,但是,您可以使用某种,在网上你会发现如何
另一件重要的事情是,C是一种通用的编程语言,所以很多事情,比如面向对象、模板和其他一些事情都可以通过稍微多做一些工作来完成
像Gnome这样的项目证明了它可以很好地完成
附言:对不起,我的英语很糟糕 谢谢,伙计。这几乎把我的声誉推到了100%以上,最后!d-;Lippman的帖子a很好地回答了这个问题,并解释了为什么在其他上下文中有时需要
typename
。这个链接已经不存在了。404错误。但是在“你能找到一个新老师吗?说实话,我真的很喜欢这个老师。”。他是我在这所大学见过的最好的“编程”老师。为了他们的利益,我将避免指定哪所大学(以及哪位教师)(为了进行比较,之前的一位教授C课程的教师指示我们“以void main()行开始每个文件){
。这有太多问题了,我甚至不知道从哪里开始……最引人注目的是,对我来说,给main()
avoid
返回类型。这太不符合UNIX)-:<这让我恶心。)考虑换大学,这样我就没有其他人了。不管怎样,我只上了一节课,主要是因为无聊。仅仅因为他犯了一个错误,并不意味着他作为一名教师毫无用处d-: