在c++11之后,模板代码中的双括号是什么意思?

xe55xuns  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(177)

我看到一些有效的模板代码如下:

template<typename R, typename P, size_t N, size_t... I>
constexpr array<R, N> to_array_impl(P (&a)[N], std::index_sequence<I...>) noexcept
{
    return { {a[I]...} };
}

那么,这里的双大括号是什么意思呢?什么时候我们需要使用双大括号(我现在使用的是c++17),我猜它只限于return语句?
我还看到了如下代码,在双括号内有函数调用:

template<typename R, typename P, size_t N, size_t... I>
constexpr array<R, N> to_array_impl(P (&&a)[N], std::index_sequence<I...>) noexcept
{
    return { {move(a[I])...} };
}

那么使用一个大括号和两个大括号有什么区别呢?
谢谢!

sycxhyv7

sycxhyv71#

什么时候我们需要使用双大括号(我现在用的是c++17),我猜它只限于return语句?
在你给出的例子中,双大括号不是必需的。用一组大括号包围包扩展就足够了。
那么使用一个大括号和两个大括号有什么区别呢?
在你给出的例子中,添加双大括号没有额外的效果。也就是说,使用一组大括号等价于使用双大括号(在给出的例子中)。

相关问题