gpt4 book ai didi

c++ - 整数类型,就像没有隐式转换的本地类型

转载 作者:太空狗 更新时间:2023-10-29 21:00:14 24 4
gpt4 key购买 nike

我正在尝试实现一个完美的整数类型而不隐式转换到它的基础类型(只有显式类型),并且遇到以下问题:

std::array<Integral, 10>a{{...}};
Integral index{5};
a[index] = ...; //error: no implicit conversion between Integral and std::size_t

C 数组也有类似的问题。据我所知,问题是 operator[]期望特定类型。如果您的类型与预期类型不匹配并且不能隐式转换为它,我能想到的唯一解决方案是显式转换、getter 和 get。要应用于数组的函数。

是否有可能实现类似于 explicit operator bool 的东西? (即 仅在特定情况下 可隐式转换)但对于 operator[]

写作 a[static_cast<std::size_t>(index)]有点违背了编写 Integral 类型的目的。

最佳答案

Is it possible to achieve something similar to the explicit operator bool (i.e. to be implicitly convertible under specific circumstances only)

这称为 contextual conversion to bool,并且仅支持 bool 类型。所以,不,这是不可能的。

IMO,显式转换(通过成员函数,如 Integral::get() const)是可行的方法。毕竟,除非您试图创建一个实际上无用的类型,否则可能会有一些您的类可以表示的值不能存储在 int 中,这意味着转换是将不得不通过抛出异常而失败。那么,显式比隐式更好。

关于c++ - 整数类型,就像没有隐式转换的本地类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22516684/

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