相关疑难解决方法(0)

为什么不将`std :: initializer_list`定义为文字类型?

这是这个问题的后续问题:声明constexpr initializer_list对象是否合法?.

从C++ 14开始,std::initializer_list该类的所有方法都标有constexpr.能够通过执行来初始化实例似乎很自然, constexpr std::initializer_list<int> list = {1, 2, 3}; 但是Clang 3.5抱怨list没有被常量表达式初始化. 正如dyp在评论中指出的那样,任何std::initializer_list文字类型的要求似乎都从规范中消失了.

如果我们甚至不能将类完全定义为constexpr,那么有什么意义呢?这是标准中的疏忽,将来会得到修复吗?

c++ initializer-list language-lawyer constexpr c++14

58
推荐指数
1
解决办法
2635
查看次数

为什么C ++编译器可以将函数声明为constexpr,而不能将其声明为constexpr?

为什么C ++编译器可以将函数声明为constexpr,而不能将其声明为constexpr?

例如:http : //melpon.org/wandbox/permlink/AGwniRNRbfmXfj8r

#include <iostream>
#include <functional>
#include <numeric>
#include <initializer_list>

template<typename Functor, typename T, size_t N>
T constexpr reduce(Functor f, T(&arr)[N]) {
  return std::accumulate(std::next(std::begin(arr)), std::end(arr), *(std::begin(arr)), f);
}

template<typename Functor, typename T>
T constexpr reduce(Functor f, std::initializer_list<T> il) {
  return std::accumulate(std::next(il.begin()), il.end(), *(il.begin()), f);
}

template<typename Functor, typename T, typename... Ts>
T constexpr reduce(Functor f, T t1, Ts... ts) {
  return f(t1, reduce(f, std::initializer_list<T>({ts...})));
}

int constexpr constexpr_func() { return 2; }

template<int value>
void print_constexpr() …
Run Code Online (Sandbox Code Playgroud)

c++ templates compile-time constexpr c++11

4
推荐指数
2
解决办法
682
查看次数