
指针类型
函数指针声明易错因语法优先级:int(p)()是指针,intp()是函数;须按“先看变量名,再往外读”理解,参数含const等限定符须完全匹配,无捕获lambda可隐式转换,调用前需判空。
new返回*T类型的零值指针,仅分配并清零内存,不初始化逻辑或创建可直接使用的slice/map/channel;make才用于构造可立即使用的引用类型。
直接修改slice元素指针值没效果,因为range遍历得到的是元素副本,v是独立变量,对*v赋值不影响原slice;正确做法是通过索引访问s[i]后解引用修改,且需判空避免panic。
根本原因是C++编译器进行namemangling而C编译器不修饰函数名,导致链接时符号不匹配;需在C++中用extern"C"声明C函数,且声明与定义必须完全一致。
三目运算符是C++唯一三元表达式,语法为condition?expr1:expr2;要求expr1与expr2可隐式转为同一类型,仅执行对应分支,禁用void、副作用操作及复杂语句。
需用reflect.TypeOf(函数名)获取函数类型,校验t.Kind()==reflect.Func后,通过t.NumIn()得参数个数,t.In(i)获取第i个参数类型(i从0开始)。
std::decay模拟函数值传递时的参数类型变换规则;它将数组转指针、函数转函数指针、去除引用及顶层cv限定符。
UE5默认C++17,禁用std::unique_ptr管理UObject因GC冲突;C++20仅限非UCLASS模块;范围for需用const引用避免拷贝;蓝图函数参数须用TArray/TMap而非...
C++函数不能直接导出为CAPI,因namemangling导致符号不一致,且C++特性(如类、模板、STL)破坏CABI稳定性;必须用opaquepointer、extern"C"...
反射中对*T类型值调用Elem()前必须先用Kind()==reflect.Ptr判断是否为指针,再用IsNil()检查是否为空,否则panic;嵌套指针需循环解引用,修改前必须确保CanAddr()...