c++ - 我应该在用户定义的文字中抛出什么异常?
问题描述
我在 C++ 中有一个用户定义的文字。我想将值保存在 中uint32_t
,但 C++ 只允许类型unsigned long long int
或long double
.
我的问题是,当用户使用超出范围的变量时,我应该抛出什么异常?
显而易见的答案是std::out_of_range
,但我认为,它已经std::logic_error
结束了std::overflow_error
(因为它是某种东西,我什至可以通过代码检测到)。因此,我会考虑std::out_of_range
or 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);
}
解决方案
推荐阅读
- actions-on-google - 对 Google 采取行动 - 在禁止交易中消费
- sql - 表 3 优于表 2,表 2 优于表 1
- javascript - 开玩笑 - 引发错误的测试功能不起作用
- asp.net-core - MSB4018 “RazorGenerate”任务意外失败
- html - 使用按钮将画布下载为图像
- visual-studio-code - 如何解决远程uri中的~(home)?
- google-bigquery - 将总和加入到最近的时间戳一次直到间隔上限
- python - 在 pandas 中创建新列以存储单独的值
- android - DrawableCompat.setTint() 是懒惰的吗?
- python - 为什么程序不能正确搜索丢番图方程的通解