在 C++ 中,& 符号有多种含义,具体作用取决于使用场景,在 Unreal Engine 开发中常见的用法有以下几种:

1. 取地址运算符

用于获取变量或对象的内存地址,返回一个指针类型。
示例

cpp

运行

int32 Health = 100;
int32* HealthPtr = &Health; // 获取 Health 变量的地址,赋值给指针

UButton* MyButton = GetWidgetFromName(TEXT("MyButton"));
UButton**ButtonPtrPtr = &MyButton; // 获取指针变量 MyButton 自身的地址

2.** 引用(Reference)声明符 ** 用于定义引用类型(别名),引用是变量的 "别名",必须在声明时初始化,且之后不能更改指向。

** 示例 **:

cpp

运行

// 定义引用(必须初始化)
int32 Score = 90;
int32& ScoreRef = Score; // ScoreRef 是 Score 的引用(别名)

ScoreRef = 100; // 等价于 Score = 100
UE_LOG(LogTemp, Log, TEXT("Score: %d"), Score); // 输出 100

在函数参数中常用引用传递,避免值拷贝(尤其对大对象):

cpp

运行

// 引用传递,直接修改原变量
void AddHealth(int32& Value, int32 AddAmount)
{
    Value += AddAmount;
}

// 调用时直接传变量,无需取地址
int32 PlayerHealth = 50;
AddHealth(PlayerHealth, 30); // PlayerHealth 变为 80

3.** 函数指针(用于委托绑定)** 在 Unreal Engine 中,绑定委托(如按钮点击事件)时,& 用于获取成员函数的指针。

** 示例 **:

cpp

运行

// 绑定按钮点击事件
if (LoginButton)
{
    // &ULoginWidget::OnLoginClicked 表示获取 OnLoginClicked 函数的指针
    LoginButton->OnClicked.AddDynamic(this, &ULoginWidget::OnLoginClicked);
}

// 事件处理函数
void ULoginWidget::OnLoginClicked()
{
    // 处理登录逻辑
}

4.** 位与运算符(逻辑运算)** 用于对二进制位进行 "与" 运算,通常用于位掩码操作(如判断权限、状态标志等)。

** 示例 **:

cpp

运行

uint8 Flags = 0b1010; // 二进制 1010(十进制 10)
uint8 Mask = 0b1000;  // 二进制 1000(十进制 8)

if ((Flags & Mask) != 0) // 判断 Flags 的第4位是否为1
{
    UE_LOG(LogTemp, Log, TEXT("第4位为1"));
}

总结

& 的含义完全取决于上下文:

  • 用于变量前:取地址(&var 表示变量地址)。
  • 用于类型后:定义引用(Type& ref = var)。
  • 用于函数名前:获取函数指针(&Class::Func)。
  • 用于两个值之间:位与运算(a & b)。

在 UE 开发中,最常见的是取函数指针(用于委托绑定) 和定义引用(用于函数参数传递)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐