gpt4 book ai didi

c++ - 除以 0 是编译器错误或运行时错误

转载 作者:行者123 更新时间:2023-12-01 14:18:08 26 4
gpt4 key购买 nike

我是 C++ 新手。我听说除以0会导致运行时错误,但是当我尝试时,它抛给我一个编译器错误C2124并且没有创建目标文件,所以编译器会自动运行代码以查看它是否可以在创建之前执行目标文件? (顺便说一句,我正在使用 Visual Studio 社区)

int main() { int a = 9 / 0; }

最佳答案

这取决于您除以 0 的上下文。如果您在仅需要在运行时评估表达式的上下文中执行此操作,则它是未定义的行为:

void f() {
int a = 9 / 0; // UB
}

请注意,UB 意味着任何事情都可能发生,包括编译器注意到代码有错误,并拒绝编译它。实际上,当您将常量除以 0 时,编译器可能至少会发出警告。

如果它发生在 constexprconsteval 上下文中,那么行为是明确定义的,并且要求编译器不编译代码:

constexpr void f() {
int a = 9 / 0; // error, never produces a valid result
}

void f() {
constexpr int a = 9 / 0; // error
}

这样做的主要原因是所有行为在编译时都已明确定义,因此在这些上下文中没有 UB。

关于c++ - 除以 0 是编译器错误或运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63636781/

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