gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:59 24 4
gpt4 key购买 nike

考虑这个经典示例:

template <typename T, std::size_t N>
constexpr std::size_t arraySize(T (&array)[N]) noexcept { return N; }

现在这工作正常,但有一个烦恼,gcc 给出警告:

warning: unused parameter ‘array’ [-Wunused-parameter]

已知解决方案:

  • 不起作用:如果我将经典的 (void)arr; 添加到函数中,我会得到 error: body of constexpr function '...' not a return-statement
  • 不满意:我可以使用 arraySize(T (&)[N]),但我想为参数命名有两个原因:
    1. 它使编译器错误消息更易于理解。
    2. 更主观地说,我认为它使代码更清晰,尤其是对于那些不习惯这种语法的人。
  • 不好:在这个特定示例中,我也可以return sizeof(array)/sizeof(array[0]);,但这种方法不是通用的解决方案,而且我认为return N; 更好,绝对更美观。
  • 很好,但并非总是可行:改用 C++14 和完全支持它的编译器。然后 constexpr 函数体像 { (void)array;返回 N; 是允许的。

如何在使用 C++11 时很好地消除未使用参数警告

最佳答案

试试这个。我有时使用这种方法

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

关于c++ - 如何将 constexpr 函数的参数标记为未使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33327363/

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