为什么会导致错误?

Why it causes an ERROR?

我在 CODEBLOCK 上用 C++ 编写了一个简单的程序。程序如下:

#include <iostream>
using namespace std;

int main()
{
    int num = 09;              //ERROR: Invalid digit 9 in octal constant
    cout << num << endl;

    num = 08;             //ERROR: Invalid digit 9 in octal constant
    cout << num << endl;


    return 0;
}

此代码与上一个代码相同。但是我改变了值并写了 num=09 而不是 015.

我同意,如果我初始化 (int num = 015),它会以八进制输出 13。

但在上面的程序中,我尝试初始化(int num = 09 和 num = 08)它给出了错误,您可以看到。

首先,我想知道它为什么会产生错误以及如何产生错误?

其次是背后的逻辑是什么?

如果有的话,请给我合理的理由和合适的例子。

前导零导致整数在 C/C++ 中被解释为八进制数。八进制的 015 是 (1*8) + 5 = 13 的十进制。

8 进制常量就是这样定义的。 158 = 1310.