C/C++ では、ポインターを返すことができます。
int* returnpointer() {
int c = 1;
int *d = &c;
return d;
}
呼び出し元関数で使用できるようにします。
int* p = returnpointer();
これは、最も自然な意味を成すので、私が最も慣れているスタイルです。
では、通常の状態では上記で十分な場合、なぜ C/C++ はアドレスを返す言語機能を提供するのでしょうか? すなわち:
int& returnpointer() {
int c = 1;
int *d = &c;
return *d;
}
呼び出し元を介して呼び出されます:
int* p = &returnpointer();
私が前者に精通していることを考えると、前者があまり適していない後者の機能はありますか?
PS: 関数がスタックを終了すると、存在しなくなった変数を指すポインタが含まれる可能性があるため、このようなコードが危険であることは承知しています。ただし、それはこの質問の範囲ではありません。