C++ 在这个真正允许的函数中,我们有未定义的行为
对于交换功能,我们有两种选择: 参考样式:C++ 在这个真正允许的函数中,我们有未定义的行为,c++,pointers,C++,Pointers,对于交换功能,我们有两种选择: 参考样式: void swap (int &a, int &b) { int temp; temp = b; b = a; a = temp; } 和指针样式: void swap (int *a, int *b) { int temp; temp = *b; *b = *a; *a = temp; } ref样式绝对合法,但指针样式在我们尝试使用时有一些问题 此函
void swap (int &a, int &b)
{
int temp;
temp = b;
b = a;
a = temp;
}
和指针样式:
void swap (int *a, int *b)
{
int temp;
temp = *b;
*b = *a;
*a = temp;
}
ref样式绝对合法,但指针样式在我们尝试使用时有一些问题
此函数变量通过值传递,而不是通过引用传递,即使它们是指针-
事实上,我们试图在局部变量的函数之外使用它的内存, 也许有一天,在某些机器上,我们有未定义的行为,代码也适用于示例: 在此代码中:
main()
{
//
{
int i=12;
int *j=&i;
}
//in this area, there is not variables i and j, but phisically threre is
// unsafe-relationship between this address: &i and what point to (12) ,
//any more logic according to this assumtion may be work
//but not safe -in the scene of undefined behavior-
我不知道你是从哪里得到关于函数外的句子的。你不应该相信他们,因为那句话是错误的 它应该是“在函数返回调用未定义行为后访问局部变量或参数”。(这是我自己的话。)
要获得官方措辞,请看C++标准。要查找的关键字是生存期、存储持续时间和未定义的行为。“我们试图在局部变量的函数之外使用其内存”哪个局部变量?不清楚您在说什么、正在谈论什么或您在问什么。请写更多、更短、更清楚的句子。还可以举一个“use”的例子。在这两种情况下,调用方都负责传递有效的参数,即确保
a
和b
引用或指向函数返回后生命周期延长的对象。只要它能做到,你的函数的两种形式都被定义得很好。“菲利普斯我写的MySistLL是不可理解的。注意,如果C++没有C,那么就可以指向最近的C++标准。作为一个一般规则:除非问题被标记为[语言律师],否则不要相信问题中的措辞。答案中的措辞更加可信。它没有错,只是含糊不清,一个可能的意思(大概是预期的意思)是正确的。给定void f(){int x=1,y=2;swap(x,y);}
,您可能认为swap
的执行在f
内部,因此局部变量x
和y
在其函数内部访问。@hvd您的解释模糊了概念。有函数的作用域,也有函数的执行。“函数里面”这个词很含糊,我认为它们是错误的。当试图理解正在发生的事情时,混合这些概念将导致大问题。