問題タブ [static-functions]
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++ コンパイラが空の (静的) 関数を最適化することは知っています。
-D
その知識に基づいて、(コンパイラのオプションを使用して) 識別子が定義されるたびに最適化されるべきコードを書きました。次のダミーの例を検討してください。
望ましい動作は次のとおりです:NO_INC
識別子が定義されているときはいつでも (-DNO_INC
コンパイル時に使用)、すべての呼び出しをT::inc(...)
最適化する必要があります (空の関数本体のため)。それ以外の場合、 への呼び出しは、T::inc(...)
特定の value によるインクリメントをトリガーする必要がありますi
。
これに関して2つの質問があります:
- 空の関数への呼び出しが最適化されているため、オプション
T::inc(...)
を指定したときに への呼び出しがパフォーマンスに悪影響を与えないという私の仮定は正しいですか?-DNO_INC
a
関数本体は空ですが、変数 (およびi
) が呼び出されたときにまだキャッシュにロードされているのではないかと思います (T::inc(a, i)
それらがまだ存在しないと仮定します)。
アドバイスをありがとう!
c++ - このような静的メンバー関数で静的メンバー変数を呼び出せないのはなぜですか?
みんな!以下のようなコード スニペットがあります: testcase.cpp
「ビルド」ボタンをクリックすると、出力メッセージは
エラー LNK2001: 未解決の外部シンボル "public: static int Test::b" (?b@Test@@2HA) 1>B:\PROGRAMPROJECT\visual 2015 pro\testcase\testcase\x64\Debug\testcase.exe : 致命的なエラーLNK1120: 1 つの未解決の外観
しかし、コードの場所を次のように変更すると:
それはうまくいきます!理由がわかりません。誰か助けてください。私のIDEはvs pro 2015 + windows10です。
templates - if ステートメントが条件の評価に失敗しました
入力用と出力用の 2 つの列挙子を格納する基本クラスがあります。どちらも静的な 2 つのメンバー関数があります。最初の関数は、入力に基づいて値を返す単なる静的関数です。constexpr 値を返す constexpr 関数テンプレートである 2 番目の関数を呼び出します。ここでクラス全体を見ることができます。
コンパイル時に値がわかっているときに関数テンプレート自体を使用すると、次のようになります。
私は正しい出力を得ています:
-出力-
ただし、実行時に値が決定されるときに非 constexpr メンバー関数を使用しようとすると、何らかの理由で非 constexpr 関数が if ステートメント内のコードを実行できません。
キーボードから入力した値に関係なく、、、0
または1
ifステートメント2
内のコードの実行に失敗しています。Foo::update()'s
常に の値を出力しています123
。
それが役に立ったら; を使用Visual Studio 2017 CE v15.9.4
しており、言語を に設定してコンパイルしていISO C++ Latest Draft Standard (/std:c++latest)
ます。
if statements
このコードがを true に評価できず、スコープ内でコードを呼び出す理由がわかりません。