返回

C++可以生成一个二维矩阵类,其中经常访问的大小、行和COLs是const成员而不是吸引子函数吗?

发布时间:2022-04-09 03:47:46 514
# golang# c++

我一直对用getter访问矩阵维度感到恼火。当然,一个人可以有公开的行和列,但这些应该是const所以Matrix类的用户不能直接修改它们。这是一种自然的编码方式,但由于使用常量成员显然被错误地视为没有UB是不可能的,这会导致人们使用非常量字段,而这些字段实际上应该是常量,在需要时可以更改大小或赋值。

我想要的是可以这样使用的东西:

Matrix2D a(2, 3);
int index{};
for (int i = 0; i < a.rows; i++)
    for (int ii = 0; ii < a.cols; ii++)
        a(i, ii) = index++;

但是在哪里呢a.rows=5;不可编译,因为它是常量。如果这个类可以包含在向量和其他容器中,那就太好了。

现在,实现C++20的P0784(更多constexpr容器)https://reviews.llvm.org/D68364?id=222943

它应该在没有强制类型转换或UB的情况下可行,甚至可以在计算常量表达式时实现。我相信c++20通过提供函数使它变得可行std::destroy_atstd::construct_at我附上了一个使用c++20的答案,它似乎表明,在类中提供const member对象确实是可能的,而且很容易做到,而不会带来不必要的负担。

所以问题是,c++20中新的constexpr函数是否有效?这些函数提供了销毁然后构造具有不同const的对象的能力?它看起来确实如此,并且通过了consexpr缺乏UB测试。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(2)
按点赞数排序
用户头像