gpt4 book ai didi

c++ - constexpr 在非常量成员函数上的用途是什么?

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

literal class compile error with constexpr constructor and function (differ vc, g++) 中接受的答案表明在 C++14 中,constexpr int A::a()constexpr A::a() const 的使用方式有所不同。即成员函数上的 constexpr 并不意味着该函数不会更改它所作用的对象。

给定的例子是:

struct A {
constexpr A() {}
constexpr int a() {return 12; }
constexpr int b() const {return 12; }
};

int main()
{
constexpr A a;
// DOES NOT COMPILE as a() is not const
// constexpr int j = a.a();
const int k = a.b(); // Fine since b() is const
}

对我来说 a() 上的 constexpr 似乎没用。constexpr 在非 const 成员函数上有具体用途吗?

最佳答案

问题:如何创建一个大小为 1024 的 constexpr 数组,其中所有元素都设置为 0 除了元素元素 42 需要11?

#include <array>

constexpr auto make_my_array() -> std::array<int, 1024>
{
std::array<int, 1024> a{};
a[42] = 11; // std::array::operator[] is constexpr non-const method since C++17

return a;
}

auto test()
{
constexpr std::array<int, 1024> a = make_my_array();
}

或者来自@michael-anderson 的更好的建议是make_iota_array:

template <std::size_t N>
constexpr auto make_iota_array() -> std::array<int, N>
{
std::array<int, N> a{};

for (std::size_t i = 0; i < N; ++i)
a[i] = i;

return a;
}

关于c++ - constexpr 在非常量成员函数上的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50149036/

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