在函数中返回局部结构
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。
我正在尝试 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。