gpt4 book ai didi

c++ - 给聚合一个转换构造函数?

转载 作者:行者123 更新时间:2023-12-02 15:53:13 25 4
gpt4 key购买 nike

我正在编写一个由多个 uint64_t 组成的大型固定大小整数类型,如下面的(简化)示例所示。我希望我的类型表现得像内置整数类型,这意味着(除其他外):

  1. 如果你不给它赋值,它应该是未初始化的,并且
  2. 它应该接受来自其他内置整数类型的扩展。

然而,在我看来,人们无法编写同时满足这两个属性的类型。这是因为属性 1 要求类型是聚合,这意味着它必须没有构造函数,而我们需要一个构造函数来实现属性 2。

有没有什么办法可以写出同时满足这两个性质的大整数类型?

#include <array>
#include <cstdint>

struct uint128_t{
std::array<uint64_t, 2> data;
};

int main(){
uint128_t x; // uninitialized (good)
uint128_t y = 100; // can we make this work while ensuring that the previous line still works?
}

最佳答案

uint128_t() {} 等构造函数默认情况下会使您的数组保持未初始化状态。让成员保持未初始化的能力与聚合无关。

但是有一个更好的选择:uint128() = default;。它会导致 uint128_t x; 未初始化,但 uint128_t x{}; 将被清零,就像内置类型一样。

关于c++ - 给聚合一个转换构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71902134/

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