对于交换功能我们有两个选择: 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-style绝对合法但指针式有一些问题,当我们尝试使用时 这个函数变量不是通过引用传递值 - 即使它们是指针 - 实际上我们尝试在其函数之外使用局部变量的内存 并且可能在某些机器中的某一天我们有未定义的行为,代码也适用于示例: 在这段代码中:
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-
答案 0 :(得分:2)
我不知道你在哪里得到关于在函数之外的句子。你不应该信任他们,因为这句话是错误的。
应该是"在函数返回后访问局部变量或参数会调用未定义的行为"。 (这些是我自己的话。)
要获得官方措辞,请查看C ++标准。要查找的关键字是生存期,存储持续时间和未定义的行为。