問題タブ [rvalue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2018 参照

c++ - 右辺値のアドレスを取得する

これは、以前のバージョンでは機能していましたが、GCC 4.6 では機能しません。

今それは言う: xvalue (rvalue 参照) のアドレスを取得します。

右辺値のアドレスを別の関数に安全に渡す方法はありますか?

0 投票する
2 に答える
88 参照

c++ - 関数をBigStruct&&foo(...);として宣言するのは良い習慣ですか。

出力は次のとおりです。


サンプルコードは、f_1()がf_2()よりも効率的であることを明らかに示しています。

だから、私の質問は:

関数を常にsome_return_type&&f(...);として宣言する必要があります。some_return_typeの代わりにf(...); ?

私の質問に対する答えが正しい場合、別の質問が続きます。

some_return_type f(...);として宣言された多くの関数があります。C ++の世界では、それらを最新の形式に変更する必要がありますか?

0 投票する
9 に答える
25563 参照

pointers - Goの一時的なアドレス?

このような場合を処理する最もクリーンな方法は次のとおりです。

これにより、次のエラーが生成されます。

a() のアドレスを取ることはできません

私の理解では、アドレスが取得された場合、Go は自動的にローカル変数をヒープに昇格させます。ここで、戻り値のアドレスが取得されることは明らかです。これを処理するための慣用的な方法は何ですか?

0 投票する
1 に答える
413 参照

c++ - 配列と右辺値(パラメーターとして)

次のコードに示されている関数呼び出し(パラメーターとして配列を使用)を区別する方法があるかどうか疑問に思います。

fooの「関数ファミリ」は、一時オブジェクトと名前付きオブジェクトを区別できます。foo_arrayの場合ではありません。

C ++ 11で可能ですか?そうでなければ、可能だと思いますか?(明らかに標準を変更します)

よろしく。フェルナンド。

0 投票する
2 に答える
876 参照

c++ - 右辺値参照は Mac OS X 10.7.4 および FreeBSD 9.0 では機能しません

これが私のコードです

--std=c++0x を指定して GCC 4.7.0 または clang 3.1 を使用して Linux でコードをコンパイルすると、0 と 2 が出力されました。 --std=c++0x を指定して clang 3.0 または clang 3.1 を実行すると、2 と 2 が出力されます。私の Mac OS X と FreeBSD の GCC は v4.2.1 で、--std=c++0x をサポートしていません。そこで、Boost.Move を使用しました。

-I~/boost_1_49_0 を指定して GCC 4.2.1 を使用して Mac OS X でコードをコンパイルすると、まだ 2 と 2 が出力されます。

更新: --stdlib=libc++ を追加すると、コードは 0 と 2 を出力しました。右辺値の参照は機能しているように見えました。しかし、ベクトル型を size_t から string に変更すると、コードの最後の 3 行をコメントしたにもかかわらず、コンパイル エラーが発生しました。今回の問題は Rvalue 参照とは関係なく、push_back() 関数に起因していました。--stdlib=libc++ を削除すると、コンパイルに合格する可能性があります。

どのクラン

clang++ --std=c++11 --stdlib=libc++ rval.cpp

0 投票する
3 に答える
716 参照

c - C 右辺値と左辺値を識別する方法は?

C では、rvalues と lvalues を識別する方法はありますか?

それらのいくつかは簡単に識別できます。たとえば、割り当てでは、左側の値が左辺値で、右側の値が右辺値です。

しかし、他のシナリオでは、そのようなルールによる識別は困難です。

例: *p++ and i++(p は整数へのポインターで、i は整数) - 右辺値か左辺値かを識別する方法は? コンテキストは++*p++機能しますが、右辺値である++i++ため機能しません(真面目な人が言ったように)。i++

式で右辺値と左辺値を識別する方法は?

0 投票する
2 に答える
165 参照

c++ - *これを返します。ポインタを削除します

私が考えているのはA、 SetVar によって返される右辺値が同一のコピーでClassあり、同じポインターを共有していることVarです。しかし、右辺値がそのデコンストラクターを呼び出すと、ClassVal.

atPOINT A *Valは 8 に等しいが、 atは にPOINT B *Val等しい-17891602。2回削除しようとしたため、_BLOCK_TYPE_IS_VALID(pHead->nHeadUse)も取得Valします。

デコンストラクターを削除すると問題は解決しますが、メモリ リークが発生します。

0 投票する
3 に答える
2180 参照

c++ - const 参照による引数の受け渡しではなく、いつコピー省略を選択する必要がありますか?

重複の可能性:
値渡しは C++11 の妥当なデフォルトですか?

私はスピードが欲しいを読んでいますか?値渡し。コピー省略と RVO についての Dave Abrahams による。そして、なぜコピー省略が必要なのだろうか?

コピーを避けるために、関数の引数を const 参照で渡す必要があると何度も言われました (私が読んだほぼすべての C++ 本で、これについて教えてもらいました)。

2 つの関数があるとします。

実引数が右辺値の場合、両方の関数でコピーが回避されます。しかし、実際の引数が左辺値の場合、コピーは f2 ではなく f1 でのみ回避されます。では、なぜこの機能が必要なのでしょうか?

0 投票する
2 に答える
128 参照

c++ - 右辺値の委任、またはconstメンバー関数に相当する右辺値

明らかに、上記のコメントの関数は合法的なC ++ではありませんが、これを実現する方法があるかどうかを知る必要があります。

など、への各呼び出しはfrob()、その「移動」バージョンを効果的に呼び出します。これはコンパイル時に判断できるものなので、なんらかの形で存在しない理由は考えられません。

私はこのようなものを書くことができます:

その結果、次のようになります。

これは読むのがやや面倒で、委任で「物事を綴る」という私の目標を達成していません。

0 投票する
2 に答える
724 参照

c++ - 右辺値ではない三項演算子の結果

このプログラムをC++11コンパイラでコンパイルする場合、ベクトルは関数の外に移動されません。

このようにインスタンスを返すと移動します。

これがideoneのデモです。

gcc4.7.0とMSVC10で試してみました。どちらも同じように動作します。
これが発生する理由は次
のとおりです。三項演算子の型は、returnステートメントが実行される前に評価されるため、左辺値です。この時点で、aとbはまだxvaluesではありません(まもなく期限切れになります)。
この説明は正しいですか?

これは規格の欠陥ですか?
これは明らかに意図された動作ではなく、私の意見では非常に一般的なケースです。