typename关键字是否存在于C++;,向后兼容“;C模板&x201D; 我正在学习C++类,老师在文章中提到, Type NeX//Cord>关键字存在于C++中(与模板声明中使用类/代码>关键字相反),与“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++的模板(除了,也许,预处理器……这在ANSI C中不是真正的事情),那么,我是不是错过了什么地方,或者这是一个真正的深奥的扩展,是由代码> GCC < /代码>还是我的老师偏离了?ANSI 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()
    a
    void
    返回类型。这太不符合UNIX)-:<这让我恶心。)考虑换大学,这样我就没有其他人了。不管怎样,我只上了一节课,主要是因为无聊。仅仅因为他犯了一个错误,并不意味着他作为一名教师毫无用处d-: