問題タブ [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 投票する
1 に答える
257 参照

c++ - C++での自動評価戦略の選択

次の関数テンプレートについて考えてみます。

値渡しのセマンティクスは、Tたまたま整数型、または少なくともコピーが安価な型である場合に意味があります。一方、pass-by- [const] -referenceセマンティクスを使用Tすることは、コピーするのにコストのかかるタイプである場合に、より理にかなっています。

あなたがライブラリを書いていると少しの間仮定しましょう。理想的には、ライブラリの実装者としてのあなたの仕事は、可能な限り一般的で効率的なクリーンなAPIを消費者に提供することです。では、両方のタイプの引数受け渡し戦略に対応する汎用インターフェースをどのように提供しますか?


これを機能させるための私の最初の試みは次のとおりです。

典型的な使用法:

もちろん、これは非クラステンプレートの暗黙的なテンプレート引数の推論を間接的に破ります。

Boost.Typeofこれは、ライブラリとマクロを使用して「修正」できますWinAPI

これは単なる準ポータブルハックですが。

ご覧のとおり、私の一般的なアプローチは、すべての場合に本当に満足できるものではありません。


趣味のプログラマーとして、私は実際の経験がなく、参照用の本番品質のコードにアクセスすることもできません。また、これは時期尚早の最適化の悪いケースのように見えるかもしれませんが、私は本当にいくつかのことに興味があります。

  1. 過去にこのタイプの最適化*を使用したことがありますか?
  2. Boost(または他のパブリック)ライブラリはすでに同様の機能を提供していますか?
  3. #1または#2の答えが「はい」の場合-非クラステンプレートの場合はどのように処理されますか?
  4. このようなもので私が見ない明らかな落とし穴はありますか?
  5. 最後に、これは正気なことでもありますか?

*プロファイルされていません。;)

0 投票する
6 に答える
3398 参照

c++ - 参照渡しの問題

参照名または変数名のいずれかを取る関数をオーバーロードできますか?

たとえば、これをやろうとすると:

この関数の呼び出し元ができるようにしたい:

メモリの使用を改善し、スコープ外の変数を操作できるようにするために、参照渡し関数を作成したいと思いますが、関数を呼び出すためだけに新しい変数を作成する必要はありません。

これは可能ですか?

乾杯

0 投票する
5 に答える
3610 参照

java - 「参照によって」オブジェクトを編集するための良い習慣は?

というタイプがあるとしましょうSuperstarSuperstarここで、いくつかの作業を行い、オブジェクトのいくつかのプロパティを編集するメソッドが必要です。

これを実装する方法の 2 つの方法を次に示します。方法 1 は次のようになります。

方法 2 は次のようになります。

これら 2 つの可能な方法のうち、「ベスト プラクティス」と見なされるのはどれですか? 最初のもの、または2番目の疑似「参照による」もの?

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

c++ - C++パスバイリファレンスプログラム

IBMは、以下の例でC ++パスを参照により説明しています(ソースを含む)。

に変更void swapnum...した場合void swapnum(int i, int j)、値渡しになりますか?

ソース

0 投票する
12 に答える
3606 参照

c - Cプログラミング-参照渡し

以下のCプログラムでは、fooを呼び出した後にbuf [0]='A'である理由がわかりません。fooは値渡しをしていませんか?

出力:

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

java - Javaメソッドが渡された変数を変更できないのはなぜですか?

次のコードが期待どおりに機能しないのを見て、私はちょっと困惑しました。

Javaは常に参照によって変数を関数に渡すと思いました。したがって、関数が変数を再割り当てできないのはなぜですか?

このプログラムはを出力しますnull

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

c# - コピーまたは参照で渡しますか?

私はC#に少し慣れていないので、デフォルトでコピーとして渡されるクラス(一般的に使用される)のリストがあるかどうか疑問に思っていました。どうすればそれらを識別できますか?

基本的な基本オブジェクトタイプ(int、uint、float、strings、...)がコピーによって渡されることを知っています。

0 投票する
6 に答える
6195 参照

c# - C#で渡される配列パラメーター:なぜそれは参照によって暗黙的に行われるのですか?

次のコードは、refキーワードなしで、値として渡されるため、渡された変数を明らかに置き換えないとします。

その関数を期待どおりに機能させるには、ref通常どおりキーワードを追加します。

関数に渡されたときに配列メンバーが暗黙的に参照によって渡される理由について、私は困惑しています。配列は値型ではありませんか?

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

php - 値を返すか、参照を変更しますか?

私は以前に両方を見たことがありますが、私の知る限り、それはかなり主観的なものですが、選択肢が与えられた場合、どちらを行いますか?なぜですか? データが大きい場合、それらのいずれかに速度/メモリの利点はありますか?

また

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

c++ - C++ポインタの問題

理解できないポインタの問題が発生しています。このようにポインタを1000回使用したようですので、ここで何が起こっているのかよくわかりません。私は次のコードを持っています:

GetCCOrderLineを呼び出すたびに、関数内に移動し、ポインターcycleOrderとcycleLineに有効な値を割り当てます。GetCCOrderLine関数の外に出ると、参照は再びNULLになります。以下のコードは、GetCCOrderLineの定義方法です。

ヘッダーファイル

cppファイル

また、上記のコードでアクセスされ、渡されたポインターに値を割り当てるために使用されている2つの配列は、次のように宣言されています。また、これらの配列は、new演算子で作成されたオブジェクトで埋められます。