首页 > 解决方案 > 我应该在用户定义的文字中抛出什么异常?

问题描述

我在 C++ 中有一个用户定义的文字。我想将值保存在 中uint32_t,但 C++ 只允许类型unsigned long long intlong 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);
}

标签: c++

解决方案


推荐阅读