‫你好, 欢迎｡
‫在这节课中, 我们将学习C++中的纯蓝图函数, 也就是概念函数｡
‫我们将了解consort关键字是什么, 我们如何使用它, 以及它如何限制我们在代码中可以做的事情,
‫以使我们更安全｡
‫让我们深入了解一下它是如何工作的｡
‫在蓝图中, 我们能够使函数变得纯粹, 这意味着我们可以消除对执行引脚的需要｡
‫现在, 在C++中, 我们可以做一些更强的事情, 那就是使函数成为常量｡
‫那么, 函数const是什么意思呢？
‫这意味着该函数不能修改类的状态, 实际上是由编译器的规则强制执行的｡
‫让我给予你们举个例子｡
‫如果我使用should platform return函数, 这个函数不应该修改类中的任何内容,
‫如果我们忘记了这一点, 那就是一个错误,
‫因为如果调用这个函数, 并在if语句中使用, 实际上改变了平台的位置, 或者它更新了移动距离或平台速度, 那就太奇怪了｡
‫所以为了保持诚实, 我们可以让它转变｡
‫我们的方法是把contact关键字放在函数的括号后面｡
‫我们也经常在这里留一个空间｡
‫现在, 为了让它正确地匹配C++文件中的函数, 我们实际上还必须把const关键字放在那里｡
‫就像我说的, 这使得任何修改类的行为都是错误的.
‫所以如果在应该平台返回的时候, 我就尝试修改一个类变量比如移动距离｡
‫我可能会尝试将移动距离设置为200｡
‫让我们看看当我们转到unreal并点击编译按钮时会发生什么｡
‫好吧, 我会的
‫您可以看到现在有一个错误｡
‫它确实无法构建,
‫如果你看一下这个错误, 你会发现这里有一些关于不能修改的东西, 因为它是通过一个常量指针来访问的｡
‫现在不用担心语言问题｡
‫这有点难解释, 但关键字const在那里, 它说它不能修改某些东西,
‫这是至关重要的｡
‫同样, 如果你调用了任何没有被标记为const的函数, 这也是一个问题｡
‫虽然调用获取演员位置是一个代价函数, 但它不会改变任何东西, 只是获取位置｡
‫不能调用未标记为const的set actor location, 因此它是无效的｡
‫它可能正在修改类｡
‫所以任何未标记为const的函数都不允许从成本函数中调用｡
‫所以你可以看到一个问题出现了｡
‫我们实际上不能在should platform return中调用get distance moved, 因为should platform return是常量,
‫但是get distance moved没有被标记为常量｡
‫所以, 快速充电, 得到移动的距离, const, make, get, distance,
‫move, cost, 所以, 在文件头中, 看到p文件, 你要添加const关键字,
‫让C++知道它不应该修改类, 它现在编译了吗, 暂停视频, 试试看｡
‫好吧, 我会的
‫欢迎回来｡
‫所以我们先来看看头文件｡
‫在右括号后面, 我们要加上一个空格的概念, 然后我们再回到C++文件｡
‫而在括号移动了一段距离之后, 我们就要把空间概念｡
‫现在, 移动距离下的曲线应该会在一段时间内更新｡
‫但是如果我们转到Unreal并点击编译按钮, 这将是编译器是否喜欢我们所做的最终仲裁者｡
‫而这一次编译成功了, 这意味着我们已经正确地更新了我们的代码｡
‫这是有道理的, 因为没有什么东西被称为从得到距离移动, 这不是概念,
‫它不试图改变任何东西｡
‫当我们调用一个函数时,
‫我们只使用常量函数, 这是一种提高代码安全性的方法, 因为函数不会在我们不知道的情况下改变东西｡
‫现在作为一个小练习, 你可能想浏览一下,
‫到目前为止, 我们使用过的所有函数, 看看哪些被标记为常量, 哪些不是｡
‫您只需将鼠标悬停在get actor location之类的函数上, 查看是否包含弹出窗口,
‫以及括号后面是否有联系人, 就可以完成此操作｡
‫你可以看到, 把get active location悬停在上面, 得到const, 把get name悬停在上面,
‫也得到const, 这是有意义的｡
‫这两个都不应该改变我们班的状况｡
‫现在如果我把鼠标悬停在tick上, 你会看到它没有被标记为const,
‫这是有意义的, 因为Tick通常被用来更新类在世界中的位置, 或者类的任何状态｡
‫我们有了向量｡
‫如果我们把鼠标悬停在, get safe, normal上,
‫你可以看到它被标记为const, 这是因为get safe, normal实际上并没有修改向量, 它只是返回一个包含新向量的值｡
‫原来如此｡
‫在这节课中, 我们学习了如何在函数中添加const, 以提高代码的安全性｡
‫下次见｡