問題タブ [pass-by-value]

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 投票する
4 に答える
3346 参照

java - Javaのメソッドへのオブジェクトの受け渡しは参照によるもののようです(Javaはvalによるものです)

Javaのメソッドにオブジェクトを渡すとき、それらは値によるものであるはずだと思いました。

これが私のコードです:

この時点で、オブジェクトへの変更はすべてmTilesタイルオブジェクトに反映されます。これを修正する方法はありますか?

皆さんありがとう。

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

c++ - オブジェクトを値渡しで別のスレッドに渡す

私は小さな試用プロジェクトを書いています.QueueList型のオブジェクトを値でスレッドプールスレッドに渡す必要があります。これは Boost スレッドプールであり、Bind を使用して引数をスレッドに渡しています。

何らかの理由で、アイテムをスレッドプールスレッドに値で渡すことができないようです...

誰かが私が間違っていることを助けることができますか?

値渡ししたい理由は、ポインタが最初の関数によってリストから削除されるため、各スレッドプールスレッドがオブジェクトの独自のコピーを持つためです。これにより、参照渡しするとエラーが発生します。

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

c++ - C++ のテンプレート パラメーター

const 参照によって パラメーターを受け取ることができる任意のテンプレート メソッドがあるとします(明らかに、自明な型とそれに応じたオブジェクトの場合)。

テンプレート関数のプロトタイプを作成するとき、この状況はどのように処理されますか?

私は次のようなものを作ることができます:

ただし、このアプローチは、他の呼び出しのラッパーとして純粋に機能する単純な関数に対してのみ有効です。

関数(テンプレート化されていないバージョン)に多くのコードが含まれている場合、コードを 2 回コピーする必要があります。

ここでもっとスマートにできますか?

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

c - OSXでのmallocの問題

OS X 10.6で実行されているCコードをいくつか作成しましたが、これはたまたま遅いので、valgrindを使用してメモリリークなどをチェックしています。これを実行しているときに気付いたことが1つあります。

このように2D配列にメモリを割り当てると、次のようになります。

次に、行列のメモリアドレスが0x0であることを確認します。

しかし、私がそうするなら

これは正常に機能します。つまり、新しく作成されたメモリへのポインタが返されます。

メモリを解放するためのfree2D関数もある場合。正しく解放されていないようです。つまり、ポインタは、0x0(デフォルトの可能性があると思いました)ではなく、freeを呼び出す前と同じアドレスを指します。

私の質問は次のとおりです。malloc/freeがどのように機能するかを誤解していますか?そうでなければ、誰かが何が起こっているのかを提案できますか?

アレックス

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

php - 「オブジェクトを参照として渡す」と「オブジェクト参照を値として渡す」を区別する簡単なPHPコードはありますか?

これは次の質問に関連しています: PHP 関数で「&」演算子はどのように機能しますか?

違いを示す簡単なコードはありますか

オブジェクトを参照として渡す

オブジェクトの参照を値として渡しますか?

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

php - PHP では、$foo = new Foo() の場合、技術的に言えば、$foo はオブジェクトですか、それとも $foo は参照ですか?

更新: で

http://php.net/manual/en/language.oop5.references.php

それは言います:

よく言及される PHP5 OOP のキーポイントの 1 つは、「オブジェクトはデフォルトで参照によって渡される」ということです。これは完全に真実ではありません。

何故ですか?以下は、完全に正しいかどうかわからない理由です。

大まかに言えば、foo はオブジェクト、またはクラス Foo のインスタンスと言えると思います。

しかし、非常に技術的に言えば、foo は単なる参照であり、変数fooが常にオブジェクトへの参照である Java や Ruby とまったく同じ方法であるというのは本当ですか。

そのため、PHP では、

「参照渡し」とは言いませんが、非常に技術的に言えば、参照である値を渡しています。つまり、「参照渡し」ではなく「参照渡し」です

しかし、PHP で foo がオブジェクトであると言うなら、「参照渡し」は理にかなっていると思います。それで本当ですか?foo は、オブジェクトではなくオブジェクトへの参照であると言われているため、「値渡し」しているだけなのでしょうか?

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

java - Java 再帰: 参照渡し

これは Java プログラマーの間で激しく議論され、物議を醸すトピックであることは認識していますが、私の問題はやや独特だと思います。私のアルゴリズムは、参照渡しが必要です。仮想(x、y)座標を割り当てるために、一般的なツリー(つまり、n-children)の時計回り/反時計回りの事前注文トラバーサルを行っています。これは単純に、訪問したツリーのノードをカウント (およびタグ付け) することを意味します。

ここで、ツリーの構造を生成します。

ノードがトラバースされた順序と、それぞれのノードに割り当てられた座標を出力したときの出力を次に示します。

0 3 2 5 4 1
0 1 2 3 4 3

0 1 2 4 5 3
0 1 2 3 4 3

注: 最初の 2 行は、時計回りの事前順序走査と x 座標の割り当てです。次の 2 行は、反時計回りの事前順序走査と y 座標の割り当てです。

私の質問は、2 行目を読み取る方法です。 0 1 2 3 4 5

編集 1: これは、ノードにアクセスする順序と割り当てた座標を出力するために使用するコードです。

また、x、y座標をよりよく説明するための引用があります。頂点。頂点の y 座標。

T の頂点の反時計回りの事前順序付け (順序付けには 0 から n − 1 の番号が付けられます) を計算し、それらを頂点の x 座標として使用します。

T の頂点の時計回りの事前順序付け (順序付けには 0 から n − 1 の番号が付けられます) を計算し、それらを頂点の y 座標として使用します。

0 投票する
4 に答える
8145 参照

matlab - 関数内の配列を変更するには?

MATLAB は値渡し言語です。ピクセルの隣人を処理する再帰関数があります。関数が呼び出されるたびに画像 (私の場合は 2 つの画像) のコピーを作成するのは非常にコストがかかります。

グローバル変数を使用して問題を解決しました。再帰関数で配列を変更する他の方法はありますか?

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

java - Javaは値渡しと参照渡しの両方です

重複の可能性:
Java は参照渡しですか?

すぐに答えを教えてください お願いします!!!

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

c++ - コンストラクターに最適な形式ですか?値または参照を渡しますか?

コンストラクターに最適な形式を考えています。サンプルコードは次のとおりです。

私が理解していることから、これはコンパイラーがそれぞれの状況で実行できる最善の方法です。

(1a)yはx1.m_yにコピーされます(1コピー)

(1b)yはXのコンストラクターの引数にコピーされ、次にx1.m_yにコピーされます(2コピー)

(1c)yはx1.m_yに移動されます(1移動)

(2a)f()の結果がx2.m_yにコピーされます(1コピー)

(2b)f()はコンストラクターの引数に組み込まれ、x2.m_yにコピーされます(1コピー)

(2c)f()がスタック上に作成され、x2.m_yに移動されます(1移動)

ここでいくつかの質問:

  1. どちらの場合も、const参照による受け渡しは悪くはなく、値による受け渡しよりも優れている場合があります。これは、 「スピードが欲しいですか?値渡し」に関する議論に反しているようです。。C ++(C ++ 0xではない)の場合、これらのコンストラクターのconst参照による受け渡しを使用する必要がありますか、それとも値による受け渡しを行う必要がありますか?また、C ++ 0xの場合、値渡しよりも右辺値参照を渡す必要がありますか?

  2. (2)の場合、一時的なものがx.m_yに直接構築されているとよいでしょう。右辺値バージョンでさえ、オブジェクトが動的メモリを割り当てない限り、コピーと同じくらいの作業である移動が必要だと思います。コンパイラがこれらのコピーや移動を回避できるようにこれをコーディングする方法はありますか?

  3. 私は、コンパイラーが最善を尽くすことができると思うことと、私の質問自体の両方で多くの仮定をしました。正しくない場合は、これらのいずれかを修正してください。