Нужна помощь в понимании указателей и разыменования в этом коде

    {
    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 перегружает оператор разыменования *?

Some programmer dude 15.08.2024 11:37
* — оператор, который можно перегрузить. Поскольку мы не знаем, что такое FString и FVector, мы не сможем вам помочь. Пожалуйста, прочитайте Как спросить с минимальным воспроизводимым примером.
Richard Critten 15.08.2024 11:38

В коде нет AActor

463035818_is_not_an_ai 15.08.2024 11:39
* используется для двух (или более) разных целей. Его можно использовать для 1) разыменования, когда оно присутствует в выражении, или 2) как объявление переменной-указателя, когда оно входит в декларатор. В вашем примере Location не объявлен как указатель. Также я очень рекомендую хорошую книгу по C++, прежде чем писать какую-либо настоящую продвинутую программу на C++.
user12002570 15.08.2024 11:40

вы ожидали увидеть FString* Name = GetOwn... ? В коде Name и Location не являются указателями, если только FString и FVector не являются типами указателей, и тогда FString* Name = .. объявит указатель на указатель.

463035818_is_not_an_ai 15.08.2024 11:41

Вы говорите, что FVector и FString являются указателями, но документация Unreal с вами не согласна. Вместо этого FString кажется классом, который перегружает оператор *. И вы похоже неправильно прочитали *Location.ToCompactString(). Это анализируется как *(Location.ToCompactString()), поэтому * применяется к возвращаемому значению ToCompactString, а не к Location.

john 15.08.2024 11:57

Курс «Изучение C++ и создание видеоигр», который вы проходите, является амбициозным. Кто-то скажет, что название — это просто клик-приманка, и что правильнее всего будет сначала «Изучить C++», а затем «Создать видеоигры». Судя по тому, что я видел, нереальное программирование непростое, поэтому изучать C++ одновременно с нереальным будет непросто.

john 15.08.2024 12:04

Итак (коротко говоря) в опубликованном вами коде нет указателей и разыменования. По крайней мере явно.

john 15.08.2024 12:09
FString имеет перегруженный operator*, который производит TCHAR*. (По моему мнению, это злоупотребление перегрузкой операторов.)
molbdnilo 15.08.2024 14:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
9
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

FString перегружает унарный оператор *, чтобы вернуть строку в стиле C const TCHAR*, где TCHAR обычно представляет собой 2-байтовый тип символа. Это упоминается в документации.

Фактическое определение этого в коде находится в UnrealString.h.inl , который включен в UnrealString.h.

Другие вопросы по теме