{
Super::BeginPlay();
FString Name = GetOwner()->GetActorNameOrLabel();
FVector Location = GetOwner()->GetActorLocation();
UE_LOG(LogTemp, Warning, TEXT("Mover Owner: %s"), *Name);
UE_LOG(LogTemp, Warning, TEXT("Actor Location: %s"), *Location.ToCompactString());
}
В этом коде я понимаю, почему * был помещен после AActor, но не понимаю, почему он не был помещен после FVector и FString, поскольку они тоже являются указателями. и как можно разыменовать переменные «Имя» и «Местоположение», если они являются не указателями, а строкой и вектором?
Я подписан https://www.udemy.com/course/unrealcourse/
* — оператор, который можно перегрузить. Поскольку мы не знаем, что такое FString и FVector, мы не сможем вам помочь. Пожалуйста, прочитайте Как спросить с минимальным воспроизводимым примером.
В коде нет AActor
* используется для двух (или более) разных целей. Его можно использовать для 1) разыменования, когда оно присутствует в выражении, или 2) как объявление переменной-указателя, когда оно входит в декларатор. В вашем примере Location не объявлен как указатель. Также я очень рекомендую хорошую книгу по C++, прежде чем писать какую-либо настоящую продвинутую программу на C++.
вы ожидали увидеть FString* Name = GetOwn... ? В коде Name и Location не являются указателями, если только FString и FVector не являются типами указателей, и тогда FString* Name = .. объявит указатель на указатель.
Вы говорите, что FVector и FString являются указателями, но документация Unreal с вами не согласна. Вместо этого FString кажется классом, который перегружает оператор *. И вы похоже неправильно прочитали *Location.ToCompactString(). Это анализируется как *(Location.ToCompactString()), поэтому * применяется к возвращаемому значению ToCompactString, а не к Location.
Курс «Изучение C++ и создание видеоигр», который вы проходите, является амбициозным. Кто-то скажет, что название — это просто клик-приманка, и что правильнее всего будет сначала «Изучить C++», а затем «Создать видеоигры». Судя по тому, что я видел, нереальное программирование непростое, поэтому изучать C++ одновременно с нереальным будет непросто.
Итак (коротко говоря) в опубликованном вами коде нет указателей и разыменования. По крайней мере явно.
FString имеет перегруженный operator*, который производит TCHAR*. (По моему мнению, это злоупотребление перегрузкой операторов.)





FString перегружает унарный оператор *, чтобы вернуть строку в стиле C const TCHAR*, где TCHAR обычно представляет собой 2-байтовый тип символа. Это упоминается в документации.
Фактическое определение этого в коде находится в UnrealString.h.inl , который включен в UnrealString.h.
Возможно,
FStringперегружает оператор разыменования*?