【发布时间】:2020-03-24 12:09:46
【问题描述】:
你好;
我有一个关于我面临的一个小问题的问题。
如果函数中的变量是临时的。例如:
int* simpleCopy(int *newvalue)
{
int result;
int* pointerToResult;
result = *newvalue;
pointerToResult = &result;
return pointerToResult;
}
如果我们尝试使用此功能,它将起作用。但我不明白为什么。
从编译器的角度来看:
该函数将创建一个名为 result 的变量和一个指向该变量的指针。然后将返回指针。 但是当函数完成并返回指针时,变量应该已经消失了它可以工作并给我准确的结果。 谁能给我解释一下原因。
感谢上一页
【问题讨论】:
-
如果我们尝试使用此功能,它会起作用。 似乎只是这样。不过,它是Undefined Behavior。
simpleCopy()返回的地址不能用于访问内容。 -
你犯了一个错误。有人告诉你,上面的代码是错误的。这是真的。现在你已经想到了类似
this code is an error so it shouldn't work的东西。那是你的错误。有时有错误的代码仍然有效。这方面的技术术语是未定义的行为。有错误的代码通常具有未定义的行为。 C++ 语言中并没有说糟糕的代码一定会失败。 -
类比:如果你知道某人住在哪里,那个人死了,他们的房子不会消失,你可能仍然可以进入房子并戳他们的遗体。这并不意味着这个人在常规意义上存在。
-
谢谢你们真的很有帮助
标签: c++ function methods arguments temporary