gpt4 book ai didi

c++ - 在 constexpr 函数中改变 int

转载 作者:IT老高 更新时间:2023-10-28 21:34:23 24 4
gpt4 key购买 nike

为什么我可以这样做:

constexpr auto i_can() {
int a = 8;
a = 9;
//...
}

但我不能这样做:

constexpr auto i_cannot() {
std::array<int, 10> arr{};
//I cannot
arr[5] = 9;
}

我的问题是:

  1. 如果我可以改变 int , 为什么我不能改变 int是在数组里面吗?
  2. 这是语言限制 (C++14) 还是标准库规范问题? reference std::array<T, N>::operator[](size_t)当前不是 constexpr .

最佳答案

constexpr 函数内的对象修改已在 C++14 中引入。但是,在修改例如赋值的标量很好,通过成员函数修改类对象仍然需要该成员函数是 constexpr。不幸的是,正如您所提到的,当前的 std::array 规范没有将非 const operator[] 声明为 constexpr .
因此,§7.1.5/5 使您的定义格式错误:

For a non-template, non-defaulted constexpr function […], if no argument values exist such that an invocation of the function […] could be an evaluated subexpression of a core constant expression (5.20), […], the program is ill-formed; no diagnostic required.

如果你想要完整的 constexpr-ness,你可以暂时使用更现代的实现。例如。 Constainer::Array .

关于c++ - 在 constexpr 函数中改变 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31903037/

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