返回int,int *和int&从一个功能

时间:2013-05-11 15:38:41

标签: c++ pointers reference reinterpret-cast

我只想澄清一些事情,想象一下我们有功能签名:

1)int* X(){}

2)int Y(){}

3)int& Z(){}

我正在尝试找出上面可以返回的值类型的详尽可能性。下面显示了上述函数体的可能实现:

1)

int* X(){
    int* b = new int(6);
    return b;
}

2)

int Y(){
    int b = 6;
    return b;
}

int Y(){
    int* b = new int(6);
    return *b;
}

编辑:2)如果b未被删除,因内存泄漏而不好。

3)

int& Z(){
    int b = 6;
    return b;
}

编辑:3)不好,因为一旦函数返回,b将超出范围。

我有什么遗漏可以从上述任何3个功能签名中退回吗?更喜欢冒险,怎么样:

int* X(){
    int b = 6;
    return reinterpret_cast<b>;
}

int X(){
    int* b = new int(6);
    return reinterpret_cast<b>;
}

? (我对reinterpret_cast的理解可能是错误的......)

2 个答案:

答案 0 :(得分:1)

int Y(){
    int* b = new int(6);
    return b*;
}

这有语法错误。要取消引用b,您可以执行*b。尽管如此,这是一个非常糟糕的实现,因为它会泄漏内存。

int

这也很糟糕,因为您正在返回对局部变量的引用。当函数返回时,局部变量int& Z(){ int b = 6; return b; } 将被销毁,并且您将留下对不存在的对象的引用。

答案 1 :(得分:0)

  1. int* X(){}
  2. 当你必须返回指向整数

    的地址时
    1. int Y(){}
    2. 用于返回简单整数

      1. int& Z(){}
      2. 这是不同的, 你在Z()中没有任何论据,因此它没用。 它必须像

        int& Z(int &a)
        {
            //code body
            return (a);
        }
        

        并将其返回给引用变量