为什么他们不是常量?
我认为这是有缺陷的API设计。或者我错过了什么?
UINT GetWidth();
UINT GetHeight();
...
VS
UINT GetWidth() const;
UINT GetHeight() const;
...
答案 0 :(得分:4)
有缺陷的API设计? C风格的C ++标题?来自带我们CString的团队?不,不能......
但是,严重的是,不要指望任何Win32 API中的GoTW级C ++使用,或者不仅仅是C风格句柄的基本包装。 Herb Sutter一直忙于使用.NET:而不是改进Microsoft库设计。 WTL就像我看到的微软来到modern C++那样接近,这导致了一个相当模糊的存在。
答案 1 :(得分:2)
很难说。我同意,但也许实现中有一些东西阻止它们成为const
,并且他们不想增加隐藏的开销。现在我们有mutable
关键字,但我认为它比这个API更年轻。
或者API的设计者可能属于(有时令人震惊的大型,imo)一群对const
关键字持敌对态度的C ++开发人员,感觉只会让事情变得更难使用。我不是Windows历史学家,所以我不能告诉你。 :)
答案 2 :(得分:1)
严格来说,你可能是对的 - 变量应该是常量。
我假设你在谈论Gdiplus C ++本机API。如果你研究一下这段代码和Gdiplus类的实现,你会发现大多数代码都是围绕Gdiplus Flat API函数(http://msdn.microsoft.com/en-us/library/ms533969(VS.85).aspx)的基本包装器。这可能会使代码变得难以正确......或者(正如另一个暗示的那样)它的Microsoft通常不是非常现代的C ++。
编辑:查看Gdiplus :: Image :: GetWidth()的代码(在GdiPlusBitmap.h中),MS很容易用const修饰符实现许多函数。他们用Image :: GetType()完成它,里面的代码与Image :: GetWidth(),Image :: GetHeight()完全相同。