gpt4 book ai didi

c++ - 为什么即使成员函数是 constexpr 也需要 constexpr?

转载 作者:IT老高 更新时间:2023-10-28 22:33:22 25 4
gpt4 key购买 nike

除非我将 constexpr 放在 initializer_list 之前,否则以下内容不会编译:

constexpr std::initializer_list<int> il = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
std::array<int, il.size()> a;

但 initializer_list 的大小是 constexpr:

constexpr size_type size() const;

最佳答案

std::initializer_list<int> il = rand() ? std::initializer_list<int>{1}
: std::initializer_list<int>{1,2,3};

std::array<int, il.size()> a;

这就是为什么。

constexpr 成员函数是一个可以在常量表达式中执行的函数,它不一定产生编译时常量的结果。例如:

struct S
{
int m;
constexpr int foo() const { return m; }
};

S s{rand()};
int j = s.foo(); // only known at run-time

constexpr S cs{42};
int arr[cs.foo()]; // compile-time constant

关于c++ - 为什么即使成员函数是 constexpr 也需要 constexpr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20241495/

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