
值传递
Go始终是值传递,传指针实为传指针副本;真正影响维护的是权限归属、副作用感知及隐式逃逸导致的内存泄漏与竞态问题。
PHP函数参数默认按值传递,修改形参不影响实参;加&可引用传递以修改原变量;对象传参虽值传但共享实例;return适用于不改原变量的场景;字面量等不可作引用参数。
struct值传递会引发大对象拷贝,因Go中所有参数均为值传递,传参时完整复制所有字段;含大数组、嵌套结构等会导致KB级memcpy开销,应优先使用指针传递避免拷贝。
小结构体值传递通常更快或持平,因CPU缓存友好且避免解引用开销;16字节优先用值类型,大结构体才需指针以避免隐形拷贝。
修改node.Next有时不生效,因Go参数是值传递,传入的是指针副本;直接赋值形参不影响原变量,需解引用改字段或传**Node修改外部指针。
std::apply的核心作用是解包tuple并按序转发各元素作为独立实参调用可调用对象;要求参数类型数量严格匹配,通常需用lambda显式指定参数类型以避免推导失败。
Go中返回局部变量指针安全但非必要,应避免过度指针化:小结构体、基础类型优先值传递;仅需读取时用值参数;修改字段或结构体过大才用指针接收者;API设计应减少nil检查,优先零值友好和接口抽象。
最常用方式是构造std::thread时直接传入可调用对象及参数,立即启动线程;传参需注意值传递拷贝、引用传递须用std::ref;lambda捕获要避免局部引用悬空;成员函数需绑定实例。
该传*T而不是T的核心判断标准是:是否需要修改调用方原始值且类型体积大或语义要求可变;否则优先传T,避免不必要的nil检查与风险。
std::promise和std::future是单次值传递的同步契约:一设一取,自动阻塞,不可重用、无超时、不支持多写,set_value仅能调用一次,get()为消费型操作,多次调用非法。