为什么函数定义foo(int i + = 1)不可能?

Net*_*ire -2 c++ arguments function

在功能

int foo(int i, int j)
{
    return i + j;
}
Run Code Online (Sandbox Code Playgroud)

ij未初始化,所以这个函数可以用,只用两个参数来调用:

foo(5, 6); // 11
Run Code Online (Sandbox Code Playgroud)

好的,但是C++有默认参数,并且可能的定义如下:

int foo(int i = 1, int j = 2)
{
    return i + j;
}
Run Code Online (Sandbox Code Playgroud)

这里既有ij具有默认参数,然后调用:

foo(5, 6); // 11
foo(5); // 7
foo(); // 3
Run Code Online (Sandbox Code Playgroud)

是可能的.那么,为什么这个定义:

int foo(int i += 1, int j += 2)
{
    return i + j;
}
Run Code Online (Sandbox Code Playgroud)

这些电话:

foo(5, 6); // 14
foo(5); // 8
foo(); // 3
Run Code Online (Sandbox Code Playgroud)

是不可能的?是否难以表示此定义或调用会导致一些问题?我想知道.

Ed *_* S. 6

因为没有意义.分配值是一回事,增加预先存在的值是另一回事.你期望i在这个(无效的)代码片段中有什么价值?

// huh?
int i += 12;
Run Code Online (Sandbox Code Playgroud)

i 从来没有一个值,所以添加它是没有意义的.