C++ 为什么函数定义foo(inti+;=1)是不可能的?

C++ 为什么函数定义foo(inti+;=1)是不可能的?,c++,function,arguments,C++,Function,Arguments,在函数中 int foo(int i, int j) { return i + j; } i和j都未初始化,因此此函数只能用两个参数调用: foo(5, 6); // 11 >但是C++的特性强>默认参数>,并做出了可能的定义,如: int foo(int i = 1, int j = 2) { return i + j; } 这里i和j都有默认参数,然后调用: foo(5, 6); // 11 foo(5); // 7 foo(); // 3 这是可能的。那么,为什么

在函数中

int foo(int i, int j)
{
    return i + j;
}
i
j
都未初始化,因此此函数只能用两个参数调用:

foo(5, 6); // 11
<> >但是C++的特性<>强>默认参数>,并做出了可能的定义,如:

int foo(int i = 1, int j = 2)
{
    return i + j;
}
这里
i
j
都有默认参数,然后调用:

foo(5, 6); // 11
foo(5); // 7
foo(); // 3
这是可能的。那么,为什么会有这样的定义:

int foo(int i += 1, int j += 2)
{
    return i + j;
}
这些呼吁:

foo(5, 6); // 14
foo(5); // 8
foo(); // 3

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

因为这毫无意义。分配一个值是一回事,增加一个预先存在的值是另一回事。您希望
i
的值在此(无效)代码段中是什么

// huh?
int i += 12;
i
从未有过值,因此添加到它是没有意义的。

声明(带或不带初始值设定项)和赋值是不同的,即使在语法上有一些相似之处

这:

声明类型为
int
的变量
i
。这:

int i = 42;
执行相同操作并指定其初始值
42

这:

看起来很像带有初始值设定项的声明,但它将值
42
分配给必须在前面声明的现有变量。这:

i += 42;
是一种复合赋值,本质上等同于
i=i+42

初始化类似于简单赋值,而不是复合赋值。初始值设定项通过提供要计算并存储在变量中的表达式来指定变量的初始值。您不能在该上下文中使用任意表达式和语句

如果希望参数的值(例如)大于作为参数传递的值2,可以在函数中执行此操作:

int foo(int i, int j)
{
    i ++;
    j += 2;
    return i + j;
}
虽然这种情况写得更清楚、更简单:

int foo(int i, int j)
{
    return i + j + 3;
}

一个原因是
inti+=42没有任何意义。是的,很大程度上是因为它们没有意义。因为语言就是这样定义的。此外,这有什么意义呢?就像穿着睡衣的船一样有意义。谢谢,你的回答不同于“不,因为不”。事实上,
inti变量。@sbi:是的,它定义了一个变量。基思:是的,你是人类。你也是一只猿。(如果有人来了,谁不能告诉人从猴子,会认为它是准确的被介绍为猿?)SBI:我不认为区别是非常重要的,在这个背景下,猜测“宣布”可能比“定义”的OP。如果我要去语言律师的精度水平(我经常这样做),我会写“对象”而不是“变量”。
int foo(int i, int j)
{
    i ++;
    j += 2;
    return i + j;
}
int foo(int i, int j)
{
    return i + j + 3;
}