不应该Gdiplus :: Image :: GetWidth()和一堆其他获得者是“常量”?

他们为什么不是常量?

我相信这是有缺陷的APIdevise。 还是我错过了什么?

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

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

很难说。 我同意,但也许在实现中有一些东西阻止它们成为const ,并且他们不想增加隐藏的开销。 现在我们有mutable关键字,但我认为这比这个API年轻。

或者,也许API的设计者属于那些对const关键字持敌对态度的C ++开发者(有时甚至是令人震惊的大,imo),他们觉得只会让事情变得更难以使用。 我不是Windows历史学家,所以我不能告诉你。 🙂

有缺陷的API设计? C风格的C ++头文件? 从谁给我们带来CString的团队? 不,不能…

但是,严肃地说,不要期望在任何Win32 API中使用GoTW-level C ++,或者不要使用C风格句柄的基本包装。 Herb Sutter一直忙于.NET:C ++而不是改进微软的库设计。 WTL和我见过的微软来到现代C ++一样 ,这导致了一个相当模糊的存在。

严格地说,你可能是正确的 – 变量应该是const。

我假设你在谈论Gdiplus C ++本地API。 如果你看看这个代码和Gdiplus类的实现,你会发现大部分代码是Gdiplus Flat API函数的基本包装器( http://msdn.microsoft.com/zh-cn/library/ms533969 (VS.85).aspx )。 这可能会使代码难以保持正确,或者(正如另一个暗示的那样),微软通常不是非常现代化的C ++。

编辑:看Gdiplus :: Image :: GetWidth()(在GdiPlusBitmap.h)的代码,它将很容易MS实现与const修饰符的许多功能。 他们用Image :: GetType()完成了它,里面的代码几乎和Image :: GetWidth(),Image :: GetHeight()完全相同。