在这个真正允许的函数中,或者我们有未定义的行为

时间:2017-01-21 07:16:08

标签: c++ pointers

对于交换功能我们有两个选择: 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- 

1 个答案:

答案 0 :(得分:2)

我不知道你在哪里得到关于在函数之外的句子。你不应该信任他们,因为这句话是错误的。

应该是"在函数返回后访问局部变量或参数会调用未定义的行为"。 (这些是我自己的话。)

要获得官方措辞,请查看C ++标准。要查找的关键字是生存期存储持续时间未定义的行为