如何解决除以0是编译器错误或运行时错误
我是C ++的新手。我听说除以0会导致运行时错误,但是当我尝试运行时,它抛出了编译器错误C2124并且未创建目标文件,因此编译器会在创建之前自动运行代码以查看其是否可执行一个目标文件? (我正在使用Visual Studio社区)
int main() { int a = 9 / 0; }
解决方法
这取决于您用0除的上下文。如果在仅需要在运行时求值的上下文中进行操作,则它是未定义的行为:
void f() {
int a = 9 / 0; // UB
}
请注意,UB意味着任何事情都可能发生,包括编译器注意到代码有错误,并拒绝对其进行编译。实际上,当您将常数除以0时,编译器可能会发出至少一个警告。
如果它发生在constexpr
或consteval
上下文中,则该行为是明确定义的,并且要求编译器不编译代码:
constexpr void f() {
int a = 9 / 0; // error,never produces a valid result
}
或
void f() {
constexpr int a = 9 / 0; // error
}
主要原因是 all 行为在编译时已得到很好的定义,因此在这些情况下没有UB。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。