为什么0%0会导致1?

Ali*_*.Kh 0 c++ undefined-behavior modulus

我的代码:

long long difft, intrv ;

cout << "difft = " << difft << endl;
cout << "intrv = " << intrv << endl;
cout << "difft mod intrv = " << difft%intrv << endl;
Run Code Online (Sandbox Code Playgroud)

输出:

 difft = 0
 intrv = 0
 difft mod intrv = 1
Run Code Online (Sandbox Code Playgroud)

0%0的结果为零,但在我的代码中结果为"1",为什么?

Sha*_*our 9

C++中,任何mod的结果0都是未定义的行为,从草案C++标准部分5.6 Multiplicative运算符4段说(强调我的):

二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数.如果/或%的第二个操作数为零,则行为未定义.[...]

此外,使用未初始化的变量也是未定义的行为,因此该程序的行为是不可预测的.


Hei*_*bug 6

它是未定义的行为,因为modulo涉及除零.