問題タブ [const-reference]
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.
c++ - 標準 C++ 型の NULL/空の値の定義
const <Container>&
返されたコンテナを外部で変更したくないため、クラスには返されるメソッドがあり、コピーにはコストがかかる可能性があります。たとえば、必要に応じて const 参照を空に返すことができるようにしconst std::set<ClassA>& foo()
たいと考えています。すなわちfoo()
std::set<ClassA>
std::set<ClassA>
しかし、一時的に構築された空の inへの const 参照を実際に返すことはできませんfoo()
。これを解決するために、一般的な場所でジェネリック テンプレート シングルトン クラスを定義して、任意の型で使用できるようにしています。
だから今foo()
のようなものになることができます
私が疑問に思っていたのは、この問題を解決するためのより良い方法があるかどうか、およびこの設計に問題があるかどうかです。
c++ - const 参照の型は何ですか?
const 参照変数を関数の const 参照パラメーターに渡しても、関数パラメーターが "被参照型の const 参照の const 参照"型にならないことはわかっています。const 参照引数の変数名は、レフリーの別のエイリアスとして扱われるだけですが、そのエイリアスを使用してレフリーを変更できないという保護が与えられています。
参照変数の名前が参照変数のエイリアスであるかのように使用されるという考え方は、変数にうまく適用され、間接的な別のレイヤーが提供されます。以下の類似のアイデアを適用することは意味がないように思われます。
- const 参照型自体がその参照先の型のエイリアスであるかのように使用されている、
- その参照先の型のエイリアスとして使用されているconst 参照型
typedef
の a 、 - テンプレート パラメーターがであり、その関数パラメーターが である場合、パラメーターに渡される (または
template
パラメーターによって推定される) const 参照変数は、その型がその参照の型として解釈されます。typename T
T const&
しかし、それは次のように発生するようです。
なぜ関数テンプレートは、既に になっている引数に対しても機能するの
int const&
ですか? (サンプルコードではint const&
、第一引数に変数、第二引数に変数を指定した呼び出しでも動作しました。) C++では「参照の参照」がint
許されないので無効なのではないでしょうか?typeid
の代わりname()
にint const&
_int const&
_int
_そうでない場合、この意味
int const&
はint
;のエイリアスではないでしょうか。どちらも異なる型 (変数の名前ではない) であるため、意味がありません。変数名に戻ると、次のようになります。
なぜ出力
int
ではなく、なぜint const&
ですか?
c++ - C++ 戻り値、参照、const 参照
戻り値、値への参照、および値への const 参照の違いを説明してもらえますか?
価値:
非定数参照:
定数参照:
これの利点は何ですか?関数内で参照が指しているこの値を変更しないようにしたいので、関数に渡す const 参照の背後にある意味を理解しています。しかし、const参照を返す意味に混乱しています。値を返すよりも参照を返す方が優れているのはなぜですか? また、const 参照を返す方が非 const 参照を返すよりも優れているのはなぜですか?
c++ - 未解決の外部シンボルの原因となる定数参照パラメータ
以下は、私が書いたいくつかのコードの簡略化されたバージョンです。このコードはこれまでのところ正常に動作します
class.h
クラス.cpp
(OtherClass は myNamespace 内の別の場所で定義され、含まれています)
OtherClass を使用するコンストラクターは other を変更しないため、const にするのが適切です。
しかし、.cpp と .h の両方でコンストラクターを使用するように変更するとconst OtherClass&
、エラーが発生します。
エラー LNK2019: 未解決の外部シンボル "public: __thiscall myNamespace::myClass::myClass(class myNamespace::OtherClass &,unsigned int,unsigned int)" (??0CarbonMatrix@molecule@@QAE@AAVCarbonString@1@II@Z)関数 _wmain path\main.obj で参照
私の知る限り、 const を宣言と定義の両方で使用する限り、このエラーは発生しません。
だから私の質問:何がうまくいかず、それを修正する方法は?