hyd*_*yde 5 c++ constexpr c++11
考虑这个经典的例子:
template <typename T, std::size_t N>
constexpr std::size_t arraySize(T (&array)[N]) noexcept { return N; }
Run Code Online (Sandbox Code Playgroud)
现在这个工作正常,但有一个烦恼,gcc发出警告:
warning: unused parameter ‘array’ [-Wunused-parameter]
Run Code Online (Sandbox Code Playgroud)
已知解决方案:
(void)arr;到函数中,我会得到error: body of constexpr function ‘...‘ not a return-statement.arraySize(T (&)[N]),但我想说出这个论点有两个原因:
return sizeof(array)/sizeof(array[0]);,但这种方法不是通用的解决方案,而且我认为return N;更好,绝对更容易.{ (void)array; return N; }允许constexpr函数体.在使用C++ 11时,如何很好地消除未使用的参数警告?
尝试这个。我有时使用这种方法
template <typename T, std::size_t N>
constexpr std::size_t arraySize(T (& /*array*/ )[N]) noexcept { return N; }
Run Code Online (Sandbox Code Playgroud)
对于新的谷歌用户:
C++17 添加了一个[[maybe_unused]]属性,可以像这样使用:
template <typename T, std::size_t N>
constexpr std::size_t arraySize(T (&array)[N] [[maybe_unused]]) noexcept { return N; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
641 次 |
| 最近记录: |