gpt4 book ai didi

c++ - 模板类和预处理器指令

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:49 26 4
gpt4 key购买 nike

模板类是多种可能的类,所以我问我:预处理器指令

#ifndef MY_CLASS
#define MY_CLASS

template<typename T>
class My_Class
{};

#endif

是必需品吗?

最佳答案

包含守卫防止重复包含同一个文件。您需要它们来防止包含以下非法定义的翻译单元:

template <typename T> class My_Class { };
template <typename T> class My_Class { };

// Error: redefinition of ‘class Foo<T>’

重复包含很容易发生。例如,考虑这样一种情况,您包含 AB,并且 A 由于某些未记录的原因已经包含 B .您可能无权从显式包含中省略 B,但也不应要求 A 不包含它。只有使用 include guards(或某种等效机制)才能使这样的文件结构成为可能。

简而言之:您可以重复声明,但在一个翻译单元中只能有一个定义

反例:以下是合法的:

template <typename T> class Foo;
template <typename T> class Foo;
template <typename T> class Foo;
template <typename T> class Foo;
template <typename T> class Foo { };
int main() {}

关于c++ - 模板类和预处理器指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019224/

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