我在 C++ 中有一个用户定义的文字。我想将值保存在 中uint32_t,但 C++ 只允许类型unsigned long long int或long double.
我的问题是,当用户使用超出范围的变量时,我应该抛出什么异常?
显而易见的答案是std::out_of_range,但我认为,它已经std::logic_error结束了std::overflow_error(因为它是某种东西,我什至可以通过代码检测到)。因此,我会考虑std::out_of_rangeor std::invalid_argument。
我也在研究 的实现std::chrono,但我没有设法从中获得任何信息。
#include <stdexcept>
struct freqHz
{
uint32_t value;
constexpr explicit freqHz(uint32_t freq) : value(freq) {}
};
constexpr inline freqHz operator""_Hz(unsigned long long freq)
{
if (freq >= (1ULL << 32)) {
throw std::logic_error("Frequency Hz will overflow");
}
return freqHz(freq);
}