これはまだ重複していないとは思いませんが、C++専用のより複雑なシナリオが議論を支配しているようだから簡単に答えを見つけることはできません。Cの一時的な(複合リテラル)パラメータのアドレスを取る
C99の関数呼び出しのパラメータリストで作成された一時的なアドレスを取得することはできますか?例えば
、init_list
またはinit_desig_init
のようなものを次のように
typedef struct {
int x;
int y;
} point_t;
int manhattan(point_t *p) {
return p->x + p->y;
}
int init_list() {
return manhattan(&(point_t){1, 2});
}
int init_desig_init() {
return manhattan(&(point_t){.x = 1});
}
ビッグ3 seem to compile it OKが、私は実際には、一時の寿命がで延長されることを説明するの参照を見つけることができませんでした少なくとも関数呼び出しを通して。
それはMM以下によって回答に基づいて、結局のところ、私は一時上の情報を探していたので、この特定の正しいCの用語ながら、私の検索の問題の一部であったが、初期化構成は複合語リテラルです。
私はそれをMSVCを尊重して「大きなクロスプラットフォーム3」と呼ぶべきですが、実際は「Cコンパイラgodboltがサポートしています」という意味です。
あなたが得た答えは良いですが、心に留めておく価値ある小さな落とし穴がありますより包括的なリテラルの使用を開始するとき:http://stackoverflow.com/questions/34880638/compound-literal-lifetime-and-if-blocks – Art
@Art - 非常に良い点。 C++の一時リテラルとC++の複合リテラルの異なる生涯規則を覚えようとするにはまだ十分ではなかったのですが... – BeeOnRope