「by」という名前の用語を含むビジュアルスタジオの表現は、時計ウィンドウで評価できません

StackOverflow https://stackoverflow.com/questions/4649363

質問

以下のC ++コードを考えてみましょう。

int _tmain(int argc, _TCHAR* argv[])
{
    int by = 10;
    printf("%d\n", by);

    int bx = 20;
    printf("%d\n", (by + bx));

    return 0;
}

正常に動作します。面白いのは、「by」変数です。それが含まれる単純な式の監視を追加しようとすると、結果はCXX0030:エラー:式を評価できません。

たとえば、ブレークポイントオン return 0, 、次の時計を追加すると、結果が得られます。

by : 10
bx : 20
by + 5 : CXX0030: Error: expression cannot be evaluated
bx + 5 : 25
by + bx : CXX0030: Error: expression cannot be evaluated
(by) + bx : 30
by + (bx) : CXX0030: Error: expression cannot be evaluated
bx + (by) : CXX0014: Error: missing operrand

これは、vs2010、vs2008で複数のコンピューターで発生します。

それで、好奇心からもっと、「by」で何が起こっているのでしょうか?それはある種の奇妙なオペレーターですか?なぜBXは同じ治療を受けないのですか?

(私はこれについてGoogleを試しましたが、「by」などの用語で関連するヒットを得ることは非常に困難です)

役に立ちましたか?

解決

ここで見ているのは、C ++式評価者の実装です BY オペレーター。表現の使用 BY ローカル変数の代わりにオペレーターとして解釈されています。

参照: http://msdn.microsoft.com/en-us/library/56638b75.aspx

この動作がバグであるか設計であるかどうかについては、多くの議論が行われています。残念ながら、それは機能を実装した人々によってのみ本当に答えられることができます。このシナリオにとって不満は、これが明示的に行われた正当な理由がある可能性があります(曖昧性を掘るコストが思い浮かびます)。または、これは単に実装者の監視である可能性があります。繰り返しますが、彼らだけが答えを知っています。

これがあなたにバグのように感じられる場合は、Connectにバグを提出してください。これはあなたの意見を聞くための最良の方法であり、チームがこの動作に関するフィードバックを一度も受け取ったことがない可能性が非常に高いです(私の検索では見つけることができませんでした)。

他のヒント

これに興味をそそられて、私はいくつかの掘削をしました。から このリンク, 、デバッガーのネイティブC/C ++発現評価者がアセンブリ言語式を処理することがわかります。続いて アセンブリ言語リンク, 、私たちは、Ansemant-Language ExpressionのByteの略であることを発見しました。それで、ちょうど別のMicrosoft Cock-up

あなたが遭遇しているのはデバッガーのものです 「メモリオペレーター」:

ネイティブC ++では、デバッガー式が次の追加演算子をサポートしています。

  • シンボルのコンテキストを指定するコンテキスト演算子({})。詳細については、コンテキスト演算子(C/C ++言語式)を参照してください。

  • メモリオペレーター(, 、wo、およびdw)メモリにアクセスします。メモリオペレーターは、あらゆる演算子の優先順位が最も低くなっています。メモリ演算子は、主にアセンブリ言語コードのデバッグに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top