无法让 std::array 的 data() 方法作为 constexpr 工作,我是在做一些愚蠢的事情吗?

问题描述 投票:0回答:1

所以,根据 CPP 参考,我应该能够使用

data()
作为 constexpr。我的最小例子是这样的:

#include <array>
#include <iostream>


int main(int argc,char** argv){
    using Container_t = std::array<double, 10>;

    constexpr Container_t arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    constexpr const double* data = arr.data();

    return arr[0];
}

并且这是此代码产生的编译错误。我在所有主要编译器上都看到类似的错误,所以我一定错过了规范允许的内容,但这似乎是一个简单的情况。谢谢!

c++ arrays std
1个回答
0
投票

A

constexpr
指针必须指向具有静态存储持续时间的对象。

您的

arr
没有固定地址,因为它是局部变量,因此
arr.data()
不能是常量表达式。

它可以用作常量表达式的部分

constexpr Container_t arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
static_assert(arr.data()[2] == 3.0);
static_assert(arr.data() + 3 == &arr[3]);

如果希望它是常量表达式,请使

arr
具有静态存储持续时间:

static constexpr Container_t arr{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
constexpr const double* data = arr.data();
© www.soinside.com 2019 - 2024. All rights reserved.