You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数返回局部struct是否可行?如何修改可得到预期返回值?

结论

你给出的代码无法正常运行,存在三处明确的语法/逻辑错误,同时你对C++类/结构体返回值的认知存在偏差。


现有代码的问题

  • func函数缺少返回语句:你声明了func返回Somestruct值类型,但函数体中只初始化了局部变量RET,没有执行return RET;,属于未定义行为,多数编译器会直接抛出警告,运行时拿到的var值是随机的。
  • 成员访问语法错误:Somestruct中的a是普通成员变量,不是成员函数,你在main中写的var.a()多了括号,直接访问var.a即可。
  • 缺少必要头文件:使用std::cout需要提前包含<iostream>头文件,否则编译直接失败。

认知纠正

C中struct和class只有默认成员访问权限的区别:struct默认public,class默认private,除此之外两者的行为完全一致。
你之前理解的「返回类时只会返回指针」是完全错误的:只要返回值声明的是类型本身(不是指针/引用),不管是class还是struct,都会执行值拷贝(C
11及以后符合条件的情况下会优化为移动构造),返回完整的对象数据,不会返回栈内存指针。你之前用class实现失败肯定是代码逻辑写错,和类型是class还是struct无关。


修改后可正常运行的代码

#include <iostream>
typedef struct _s{
  int a;
} Somestruct;

Somestruct func(){
  Somestruct RET;
  RET.a = 10;
  return RET; // 补充返回语句
}

int main(){
  Somestruct var = func();
  std::cout << var.a; // 去掉成员访问的括号
  return 0;
}

运行后会输出你预期的10。


内容的提问来源于stack exchange,提问作者a276me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:15:00