Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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
I';I’我注意到我有一个不传递论点的问题 我是自学的C++程序员。我主要学习UE4,我还有很多路要走。我在学校学习计算机科学,我在CSC 211(我想这是第二阶段?如果班级人数不普遍的话)。但我注意到,在课堂上,我的老师和其他学生经常互相争论。我说的很多,是指很多。例如,我们有一个实验室,在有人输入他们想要在餐厅里吃的东西后,创建一个检查。我最终被卡住了,查了一下。我看到了很多东西,比如:void CreateMenu(Menu MenuArray[]),所以我最终遵循了教程,一切都做对了。但当我编程时,我会做很多类似的事情(来自UE4的代码)_C++_C++11_Arguments - Fatal编程技术网

I';I’我注意到我有一个不传递论点的问题 我是自学的C++程序员。我主要学习UE4,我还有很多路要走。我在学校学习计算机科学,我在CSC 211(我想这是第二阶段?如果班级人数不普遍的话)。但我注意到,在课堂上,我的老师和其他学生经常互相争论。我说的很多,是指很多。例如,我们有一个实验室,在有人输入他们想要在餐厅里吃的东西后,创建一个检查。我最终被卡住了,查了一下。我看到了很多东西,比如:void CreateMenu(Menu MenuArray[]),所以我最终遵循了教程,一切都做对了。但当我编程时,我会做很多类似的事情(来自UE4的代码)

I';I’我注意到我有一个不传递论点的问题 我是自学的C++程序员。我主要学习UE4,我还有很多路要走。我在学校学习计算机科学,我在CSC 211(我想这是第二阶段?如果班级人数不普遍的话)。但我注意到,在课堂上,我的老师和其他学生经常互相争论。我说的很多,是指很多。例如,我们有一个实验室,在有人输入他们想要在餐厅里吃的东西后,创建一个检查。我最终被卡住了,查了一下。我看到了很多东西,比如:void CreateMenu(Menu MenuArray[]),所以我最终遵循了教程,一切都做对了。但当我编程时,我会做很多类似的事情(来自UE4的代码),c++,c++11,arguments,C++,C++11,Arguments,我知道这段代码看起来更好,我想我的问题是: 如何知道何时传递参数? 即使您当时没有使用变量,为什么还要传递参数 如果MenuArray[]的变量已经存在,并且您可以在不传递参数的情况下更新它,void CreateMenu()和void CreateMenu(Menu MenuArray[])之间有什么区别?我可以想到两种方法“不传递参数”: 编辑类成员变量 编辑一个全局变量(或者至少编辑一个对函数“全局”的变量,这意味着函数隐式地知道它) 如果您想了解第一个要点(成员与参考参数),这将是一

我知道这段代码看起来更好,我想我的问题是:

如何知道何时传递参数?

即使您当时没有使用变量,为什么还要传递参数


如果MenuArray[]的变量已经存在,并且您可以在不传递参数的情况下更新它,
void CreateMenu()
void CreateMenu(Menu MenuArray[])
之间有什么区别?

我可以想到两种方法“不传递参数”:

  • 编辑类成员变量
  • 编辑一个全局变量(或者至少编辑一个对函数“全局”的变量,这意味着函数隐式地知道它)
如果您想了解第一个要点(成员与参考参数),这将是一个更具风格的答案,但我认为您谈论的是第二个要点

第二个要点(参数vs全局)仍然是风格,但问题与风格有关,而不是功能。简短的回答是不惜一切代价避免全局变量。这包括一些变量,您不一定认为这些变量是全局变量,但是函数隐式地知道这些变量(在与函数相同的范围内创建)

这回答了你的第一个问题。你的第二个和第三个问题基本上是“为什么?”。我可以想到几个原因:

  • 它使函数的作用更加明显
  • 现在,您可以将函数重新用于其他目的
一旦你开始从事大型甚至中型项目,第一点对你来说就会变得非常明显。您希望使函数的功能变得显而易见。如果修改参考参数,将自动执行此操作。更好的方法是从函数返回一个值,并根据该值设置变量:

Menu* CreateMenu()
如果你的函数只是修改他们碰巧有权访问的数据,你将很难跟踪什么函数对哪个变量做了什么

第二点是函数:可重用性

void CreateMenu()
可以精确修改您在函数中指定的变量

void CreateMenu(Menu Menu[])
可以修改您碰巧传入的任何菜单数组。想象一下,您需要在下面的某个位置创建另一个菜单。其中一些逻辑(并非全部)将与此版本的CreateMenu共享。假设您需要再创建10个菜单。。。想象一下,在实现了10个版本的CreateMenu之后,您突然需要更改菜单创建逻辑

简而言之,通过传递参数,可以在整个过程中重用函数,从而节省大量工作


要直接触及第二个问题(既然传递变量的原因已经清楚了),函数就是一台机器。它根据给定的输入做一些事情。如果您传递的参数不是机器所需的参数,那么您应该考虑重写函数。如果参数“有时”是必需的,而其他时候它们什么都不做,那么函数可能写得不好。也有可能是值得接受的。

“我想我的意思是传递参数”不,这只是同一事物的不同措辞。你的问题在这里没有多大价值。所有这些都已经包含在任何优秀的初学者书籍或教程中。如果你想知道什么时候传递参数,看看函数声明(或参考文档)。好的,但不是每个人都是专业程序员,所以我想知道为什么我会被否决。我只是想知道如何使我的编程更好。编译器没有告诉你如何思考。。?比如,什么时候传递参数,什么时候不传递参数?如果我理解正确,你是在问设计决策“一个函数应该接受参数还是应该使用类成员”?通常,这一决定并不明显。没有规则可以选择一个或另一个。它可以归结为“这个值是否可以用于多个函数调用?”和/或“知道这个值是否在类的责任范围内?”@mathew好的,现在我知道你的问题了。如果您想知道何时获取函数实现的参数?。我相信这就是造成误解的原因。你可能想复习一下,特别是关于假装你在和一位忙碌的同事谈话,以及让第一段引人入胜、内容丰富的部分。我看完了你的第一段,才觉得从你的生活故事到你的问题要花很长时间。所以我停止阅读并发表了这篇评论。(其他人可能已经停止阅读并投了反对票。)希望你没有失去太多的读者,仍然可以得到答案。下次,请考虑首先问你的问题。如果你必须提供一本传记,请在结尾处提供。你的回答中有些部分是相关的,可能有用,但有些部分不清楚。另外,由于这是C++标签的问题,如果你的描述没有用C++中的不正确的方式来描述事物,那么这将是有帮助的。例如
Menu* CreateMenu()