Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在函数调用时重新指定默认参数_C++_Assign_Function Call_Default Parameters - Fatal编程技术网

C++ 在函数调用时重新指定默认参数

C++ 在函数调用时重新指定默认参数,c++,assign,function-call,default-parameters,C++,Assign,Function Call,Default Parameters,我相信这个问题已经被问过几百次了,但奇怪的是,我什么也找不到。。。我想知道如何在调用时将值重新指定给默认函数参数,特别是忽略位于其左侧的其他参数 这不会编译,因为我是从python使用的。但是怎么做呢 void test(int i=0, int j=1){ std::cout << i << " " << j << std::endl; } int main() { test(j=2); } void测试(int i=

我相信这个问题已经被问过几百次了,但奇怪的是,我什么也找不到。。。我想知道如何在调用时将值重新指定给默认函数参数,特别是忽略位于其左侧的其他参数

这不会编译,因为我是从python使用的。但是怎么做呢

void test(int i=0, int j=1){

    std::cout << i << " " << j << std::endl;

}

int main()
{

    test(j=2);

}
void测试(int i=0,int j=1){
现在,你的问题是为什么它不被允许,而不是它是否被允许。知道你来自Python,答案更容易解释

在Python中,赋值是语句,而不是表达式。这意味着您不能在函数调用中为变量赋值:

>>> def foo(bar):
...  return bar
... 
>>> x=0
>>> foo(x=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() got an unexpected keyword argument 'x'
在这种情况下,
1
被分配给
x
,而
x
的新值作为一个参数传递给
foo()
。所有这些混乱都来自一个名叫的人,他为了任何人的利益,决定与另一个人的发明保持(某些)兼容性,即

现在,很明显理解为什么C++中的关键字参数会涉及不可解析的堆栈溢出(但是编译器,而不是程序)。.该程序如何区分传统的

赋值和返回
表达式(如上所述)和关键字参数?如果不修改语言,使其不再是C系列的一部分,就不可能做到这一点

这一团糟(有点)Python不想与C/C++ +/C/-//C.*/C/C/C/..兼容,但它确实希望允许关键字参数,因此另一个人,决定了按他们一直需要的方式分配赋值语句。这允许C++中使用的语法在Python中用于关键字参数。
<>!!如果你有任何想法让C++更复杂,为什么不去说你脑海里想到的第一件事?我相信他们会把它标准化,不管它是什么,你会被.< /p>哦,你的余生都被间谍。你能解释为什么吗?因为他们没有用那种方式设计语言。这个特性在C++中是不存在的。就是做不到。我不知道你在寻找什么其他解释。这背后可能有技术或哲学上的决定。我不知道没有这个功能有什么好处。谁会反对这个问题?“我不知道没有这个功能有什么好处。”C++编译器已经足够复杂了。一旦你知道了足够的语言,就如何建议这个特征与其他语言特征(如函数模板)进行交互,那么你应该向委员会提出建议。谢谢,这就是我希望的解释。
void foo(int x) {
    // ...
}

void oof() {
    int x = 0;
    foo(x = 1);
}