Ant*_*oCS 25 c++ scope return-value
我将重新开始使用c ++并考虑变量的范围.如果我在函数内部有一个变量然后我返回该变量,那么当它返回时变量不会"死",因为它所在的范围已经结束了?
我用函数返回一个字符串尝试了这个,它确实有效.有谁能解释一下?或者至少指出一些可以向我解释的地方.
谢谢
这实际上取决于您返回的变量类型。如果返回一个原语,那么它是通过复制而不是通过引用返回的,因此该值被复制到堆栈顶部(或者更常见的是放入寄存器中),调用函数可以在其中获取它。如果您在堆上分配一个对象或内存并返回一个指针,那么它不会消亡,因为它位于堆上,而不是堆栈上。但是,如果您在堆栈上分配某些内容并返回它,那将是一件坏事。例如,其中任何一个都会非常糟糕:
int *myBadAddingFunction(int a, int b)
{
int result;
result = a + b;
return &result; // this is very bad and the result is undefined
}
char *myOtherBadFunction()
{
char myString[256];
strcpy(myString, "This is my string!");
return myString; // also allocated on the stack, also bad
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18978 次 |
| 最近记录: |