1

おそらくすべての Windows C++ 開発者を混乱させるという事実を除けば、

const の正確性を確保するために (まだ存在しない場合)_In_必須に拡張するのが賢明ではないでしょうか?const

そう

int DoSomething( _In_ int * pInput);

になる

int DoSomething( const int * pInput);

明らかに _[In]Out_ は Nothing に展開する必要があります


編集:明らかに最初の問題は、これはポインターまたは参照パラメーターの前で展開する場合にのみ意味があるということです。

したがって、simpke マクロ展開では十分ではないかもしれません。強制するという概念をまだ放棄したくありconstません。モットーは次のとおりです。SALどのパラメーターが何であるかを示す表記法が既にありroます。それを使用してみましょう。

4

2 に答える 2

1

それがマクロ展開であると仮定すると、それはパラメーターにコピーされた値に対しては機能しません。

void f( _In_ X x) { g(++x); // ok to modify }
于 2014-11-11T11:03:02.797 に答える
1

constSAL 注釈が使用されている場合でも、不変であることを意図したポインター/参照パラメーターを使用するようにプログラマーをトレーニングする必要があります。

_In_に展開する際の問題は次のconstとおりです。

  • SAL アノテーションを見たことがないプログラマーは、さらに混乱します。
  • これらのプログラマーは、コンパイラーが double const を診断するかどうかに応じて、書き込み_In const int*を行い、コンパイラー・エラーが発生する可能性があります。
  • プログラマーが関数内で変更したい値渡しのパラメーターは面倒です。
  • COM インターフェイス ポインタにとっては壊滅的です。COM インターフェイスにはconstメンバーがありません (これは非常に C++ 固有のものであるため)。これは、const インターフェイスへのポインターがまったく役に立たないことを意味します。しかし、かなりの頻度で、インターフェイス タイプの_In_または_In_opt_パラメータを渡します。
于 2014-11-11T12:13:44.860 に答える