-3

我只是想澄清一些事情,假设我们有函数签名:

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可能有误...)

4

2 回答 2

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

这有语法错误。要取消引用b,您会这样做*b。尽管如此,这是一个非常糟糕的实现,因为它会泄漏内存。动态分配的int永远不会被销毁。

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

这也很糟糕,因为您正在返回对局部变量的引用。当函数返回时,局部变量b将被销毁,您将获得对不存在对象的引用。

于 2013-05-11T15:41:55.807 回答
0
  1. int* X(){}

当您必须返回指向整数的地址时

  1. int Y(){}

用于返回简单整数

  1. int& Z(){}

这是不同的东西,你没有任何论据,Z()因此它是无用的。它必须像

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

并将其返回给参考变量

于 2017-04-25T14:04:10.677 回答