在函数中返回局部结构

returning local struct in a function

我正在尝试 return 来自函数的局部变量。

typedef struct _s{
  int a;
} Somestruct;

Somestruct func(){
  Somestruct RET;
  RET.a = 10;
}

int main(){

  Somestruct var = func();
  std::cout << var.a();
}

这行得通吗?如果我没有,我需要做什么才能使它 return 成为我想要的值? 我曾尝试使用 类 来执行此操作,但它不起作用。根据我了解到的信息,当我 return 类 它只是 return 指向内存的指针。但是,我在想如果我做结构,那么它会在物理上 return 整个数据,而不仅仅是引用或指针。

what do i need to do to make it return the value i want?

您需要使用 return RET;

直接要求程序执行此操作
typedef struct _s{
  int a;
} Somestruct;

Somestruct func(){
  Somestruct RET;
  RET.a = 10;
  return RET;  // <====
}

when i return classes it just returns the pointer that points to the memory

不,C++ 有 value semantics。按值返回 struct/class 将 return 结构本身。

结构和 class 在这方面没有区别。


附注:var.a() 不是函数,您可能需要 var.a

int main(){

  Somestruct var = func();
  std::cout << var.a << "\n";  // <====
}

如果你像这样修改 func() 它会起作用:

Somestruct func(){
  Somestruct RET;
  RET.a = 10;
  return RET;
}

关于你的第二点,你绝对可以return 类,你只需要注意return像这样的实际对象myClass myFunc()而不是通过一个指针 myClass* myFunc() 也不通过引用 myClass& myFunc()

will this work?

没有。存在严重问题:

  • 函数已被声明为 return 一个对象,但没有 return 语句(也没有抛出或任何会终止程序的东西)。程序的行为未定义。
  • _s::a 不可调用,因此 var.a() 格式错误。
  • 标识符_s保留给全局命名空间中的语言实现。通过定义它,行为将是未定义的。

what do i need to do to make it return the value i want?

一个return语句。

From the info i have learnt, when i return classes it just returns the pointer that points to the memory.

你学错了。当您 return 一个 class 的实例时,您 return 值的副本(为了初学者的利益,这是稍微简化的描述 reader)。

However, i was thinking if i did structs

结构也是 class。