【问题标题】:Understanding _countof macro [duplicate]了解 _countof 宏
【发布时间】:2014-04-15 15:51:28
【问题描述】:
template <typename _CountofType, size_t _SizeOfArray>
char( *__countof_helper1( _CountofType(&_Array)[_SizeOfArray]))[_SizeOfArray];

#define _myCountOf(_Array) (sizeof(*__countof_helper1(_Array)) + 0)

我试图理解 _countof 宏,但无法理解它是如何计算数组大小的。请哪位大神一点一点的解释一下上面的代码

【问题讨论】:

标签: c++ templates


【解决方案1】:

这是一个过于复杂的声明。在现代 C++ 中,您可以这样做:

template<typename T, size_t SizeOfArray>
constexpr size_t countof(T (&array)[SizeOfArray]) { return SizeOfArray; }

解决方案的关键是T (&amp;array)[SizeOfArray]:这是传递数组引用所需的语法。 TSizeOfArray 是由编译器推断出来的,所以它对于你扔给它的任何数组都有有效的值。

在您的助手案例中,程序员可能无法访问constexpr,但仍希望确保在编译时而不是在运行时评估表达式。这很令人困惑,因为 C++ 函数声明语法令人困惑:它声明了一个函数,该函数接受任何类型和长度的数组,并返回一个相同长度的字符数组。然后它使用sizeof 查找字符数组的长度并返回。

【讨论】:

猜你喜欢
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多