【问题标题】:What does char(*)[int] mean in C++?char(*)[int] 在 C++ 中是什么意思?
【发布时间】:2015-03-11 12:50:55
【问题描述】:

我正在阅读this article on SFINAE,我发现这对函数很有趣:

template<int I> void div(char(*)[I % 2 == 0] = 0) {
    // this overload is selected when I is even
}
template<int I> void div(char(*)[I % 2 == 1] = 0) {
    // this overload is selected  when I is odd
}

这很好用(g++-4.9),但我不太了解参数的类型(char(*)[int] -part.)。还有其他人吗?

【问题讨论】:

  • 从技术上讲,它是一个指向零个或一个字符的数组的指针。
  • 在这种情况下它并不重要,因为它只用于模板解析。在更现代的 C++ 中,您可以简单地将检查添加到模板列表并使用 enable_if
  • 对我来说这看起来像char(*)[bool]
  • 是的@Hurkyl,在示例中它是一个布尔值。

标签: c++ templates sfinae


【解决方案1】:

char(*)[I % 2 == 0] 表示指向char 数组的指针,维度为I % 2 == 0。指向维度为0 的数组的指针是非法的,SFINAE 表示这会导致不考虑模板(与发生编译错误相反)。

【讨论】:

  • 接受,因为您还解释了该类型如何与使用它的上下文相关。
【解决方案2】:

char(*)[I % 2 == 1] 是指向I % 2 == 1chars 数组的指针类型。您可以使用cdecl 来解开这些谜题。另请参阅spiral rule

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 2019-10-17
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多