4

なぜそれらはconstではないのですか?

これは API の設計に欠陥があると思います。または、何か不足していますか?

UINT GetWidth();
UINT GetHeight();
...

対。

UINT GetWidth() const;
UINT GetHeight() const;
...
4

3 に答える 3

4

欠陥のある API 設計? C スタイルの C++ ヘッダー? 私たちにCStringをもたらしたチームから? いや、ありえない...

ただし、真剣に、Win32 API でのGoTWレベルの C++ の使用、または C スタイル ハンドルの基本的なラッパー以上のものを期待しないでください。Herb Sutter は、Microsoft ライブラリの設計を改善することよりも、.NET: C++ を開発することに忙殺されています。WTLは、Microsoft が最新の C++に到達するのを私が見たのと同じくらい近いものであり、それがかなりあいまいな存在につながっています。

于 2009-03-11T09:33:45.417 に答える
2

言いにくい。私は同意しますが、おそらく実装に何かがあり、constそれらが. 現在はmutableキーワードがありますが、この API よりも若いと思います。

constあるいは、API の設計者は、キーワードに対して敵対的であり、物事を使いにくくするだけだと感じている (時には驚くほど大規模な、imo) C++ 開発者のグループに属しているのかもしれません。私は Windows の歴史家ではないので、何とも言えません。:)

于 2009-03-11T09:33:16.587 に答える
1

厳密に言えば、あなたはおそらく正しいでしょう-変数はconstでなければなりません。

GdiplusC++ネイティブAPIについて話していると思います。このコードとGdiplusクラスの実装を調べると、ほとんどのコードがGdiplus Flat API関数(http://msdn.microsoft.com/en-us/library/ms533969 )の基本的なラッパーであることがわかります。 (VS.85).aspx)。これにより、コードをconst-correctにするのが難しくなる可能性があります...または(別のヒントとして)Microsoftは通常あまり現代的ではないC++です。

編集:Gdiplus :: Image :: GetWidth()(GdiPlusBitmap.h内)のコードを見ると、MSがconst修飾子を使用して多くの関数を実装するのは簡単でした。彼らはImage::GetType()でそれを行い、内部のコードはImage :: GetWidth()、Image :: GetHeight()とほとんど同じです。

于 2009-03-12T22:45:35.023 に答える