c++ - 我可以使用ELI5作为引用和指针以及何时使用它们吗?

标签 c++ pointers reference

我已经学习编码已经有一段时间了,但仍然无法理解引用和指针。我搜索的每个答案对我来说都太复杂了。

例如,当我们调用要使用的变量时

int32 y = 1;
int32 x = 2;
int32 z = y + x;

1)“z”中到底发生了什么?它是通过引用,通过指针还是仅通过变量来调用“y”和“x”?

在这段代码中,我目前正在学习
FString Log = TEXT("Hello");
FString* PrtLog = &Log;
Log.Len();
(*PrtLog).Len();
PrtLog->Len();

2)这是怎么回事? “PrtLog”是引用还是指针?

3)讲师说* PrtLog是“取消引用” PrtLog。这是否意味着删除了PrtLog的引用? *和->之间有什么区别

4)如果调用变量也一样,为什么我们甚至需要引用或指针?

5)为什么有人声称90%的变量将使用更高级别的引用和指针?他们有什么好处吗?如果仅按变量调用,不是更简单,更快吗?

抱歉,如果有太多问题。我无法在引用和指针的任何地方都能得到答案,所以我感到很困惑。

最佳答案

1) What exactly is happening in "z"? Is it calling "y" and "x" by reference, by pointer or just calling them by variable?



这些变量都不是指针或引用。他们只是..变量。 xy是使用的变量。 operator+(x, y)

2) What is going on here? Is "PrtLog" a reference or a pointer?


PrtLog是一个指针,可以通过查看其类型声明来看到它:
FString*

显然,它是FString的指针。

可能由于= &Log;而引起困惑。在这部分代码中,&是获取指向Log的指针所需的地址运算符。 &仅在类型的一部分时表示引用,这里的Log是变量,而不是类型。

3) The lecturer said *PrtLog is "dereferencing" PrtLog. Does that mean the reference for PrtLog is removed? Whats the difference between * and ->



在这种情况下,取消引用只是一个不幸的名字,它意味着获取指针指向的“事物”。 FString*是指向FString的指针,因此取消引用此类指针将产生FString
*->之间的区别在于->是:(*pointer).或“取消引用pointer并访问其成员”的简写。

4) Why do we even need a reference or a pointer if calling a variable is just as fine?



您可能有一些可能要使用指针或引用的原因。例如,引用一个对象但不复制该对象本身。

5) Why do some people claim 90% of variables will be using references and pointers in higher levels? Are they beneficial in any way? If we just call by variable, isn't it simpler and faster?



谁声称呢?我没有数字,但这似乎不准确。当然,它们都是非常有用的构造,但是如果以这些数目使用它们,则在很大程度上取决于项目。

关于c++ - 我可以使用ELI5作为引用和指针以及何时使用它们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62416164/

相关文章:

c++ - 错误 : cast from 'char*' to 'unsigned int' loses precision

xml - 如何从多个地方引用 XML 节点

c# - 在 "Add Reference"Visual Studio 2012 选项卡中看不到 SlimDX

c++ - 无法从引用访问成员变量或方法

c++ - 直接调用类操作符

c++ - 创建自己的owner_ptr类;传递堆栈或静态分配地址时如何避免UB?

c++ - std::map 中的对象指针在通过 getter 检索时损坏

c - 初始化指针数组

c++ - 如何获取 Char a const * TCHAR 指针指向

c++ - 用户定义的容器不适用于 std::ranges