gpt4 book ai didi

c++ - typedef class Smth 是什么意思?

转载 作者:行者123 更新时间:2023-11-30 00:55:38 28 4
gpt4 key购买 nike

刚刚看到了here .

从来没有遇到过这样的构造,我不明白,这是什么意思!以及它在特化方面的工作方式,因为 typedef 不会生成新类型:

错误:

template <typename T>
void a();
typedef int a_t;
typedef int b_t;
template<> void a<a_t>(){}
template<> void a<b_t>(){}

编译时出现警告:'typedef' 在此声明中被忽略,按预期工作:

template <typename T>
void a();
typedef class a_t;
typedef class b_t;
template<> void a<a_t>(){}
template<> void a<b_t>(){}

最佳答案

没什么意思,最好别写。如果需要,给 typedef 一个合适的名称

typedef class a_t a_t;

虽然我没有看到任何好处。最近转向 C++ 的 C 程序员可能倾向于这样做,因为在 C 中你不能通过简单地命名来引用类名(“标签”,在 C 术语中),但你必须在它前面加上标签类型(“struct a_t”,或“union a_t”)或者你为它做一个 typedef。然而,即使在这种情况下,程序员之后也会忘记这个名字:)

在 C++ 中不需要。在 C++ 中,typedef 名称和类名称的存在并不能通过将这些名称保留在不同的“ namespace ”中来解决(可以说,用 C 术语来说。每个“ namespace ”都有一种“语法定向消歧”。这样你就可以说“foo”和“struct foo”和“goto foo”,每次“foo”都可能是一个完全不同的实体)。在 C++ 中,typedef 名称将替换纯类名,从今以后,名称“a_t”既是 typedef 名称又是类名称。

至于标准语,我们有一个 Unresolved 问题,请参阅 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#157 .

关于c++ - typedef class Smth 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925744/

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