c++ - C++ 如何标记未使用函数的constexpr参数?

  显示原文与译文双语对照的内容

请考虑以下典型示例:


template <typename T, std::size_t N>


constexpr std::size_t arraySize(T (&array)[N]) noexcept { return N; }



,gcc gcc,但这是一个很好的工作, gcc给出警告:


warning: unused parameter 'array' [-Wunused-parameter]



已知解决方案:

  • 如果我将经典 (void)arr; 添加到函数中,则 error: body of constexpr function '...' not a return-statement
  • 无法满足:我可以使用 arraySize(T (&)[N]),但我想通过以下两个原因来 NAME 参数:
  • 它使编译器错误消息更易于理解。
  • 更为主观的是,我认为这使得代码更加清晰,尤它的是对那些没有生活和呼吸的。
  • 不好:在这个特殊的例子中,我还可以 return sizeof(array)/sizeof(array[0]); 但这种方法并不是通用解决方案,而且我认为 return N; 更好,绝对容易。
  • 好但不总是可能的: switch 使用C++14和编译器来支持它。 然后constexpr函数体就像 { (void)array; return N; } 被允许。

如何正确地去除未使用的参数警告,在使用时?

时间: 原作者:

我建议以下( ab ) 使用逗号运算符:


return (void)array, N;



试试这个我有时用这个方法


template <typename T, std::size_t N>


constexpr std::size_t arraySize(T (&/*array*/)[N]) noexcept { return N; }



最好的解决方案是第二点禁止的,即使用 T(&)[N]

从注释中,另一种可能的方法是使用以下返回值:


return array? N : N;



我相信编译器将会消除它,并且运行时没有任何性能问题。

原作者:
...