【发布时间】:2014-04-11 12:05:06
【问题描述】:
显式将数组衰减为指针的最简洁和惯用的方法是什么?
例如,考虑您需要能够指导 SFINAE 或明确说明过载的情况:
template<typename T, std::size_t N> void foo(T(&x)[N]);
template<typename T> void foo(T *x);
//
int x[2] = {0, 1};
foo(x);
【问题讨论】:
-
可能是一元加号?
-
你在问什么?上面的代码没有歧义。
-
@juanchopanza 你试过了吗?我同意这很奇怪,但两者都是完全匹配。
-
您可以通过将第二个模板定义为
template<typename T> void foo(T * const& x);来避免歧义。在T的参数推导过程中不会再发生数组衰减。 -
@JohannesSchaub-litb 在 C++14 中引入了最终的标准方式:
std::decay,请参阅我的最新更新