-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