C++ 不应该';t Gdiplus::Image::GetWidth()和一堆其他getter是;常数;?

C++ 不应该';t Gdiplus::Image::GetWidth()和一堆其他getter是;常数;?,c++,windows,winapi,gdi+,C++,Windows,Winapi,Gdi+,为什么它们不是常数 我相信这是有缺陷的API设计。还是我遗漏了什么 UINT GetWidth(); UINT GetHeight(); ... vs 很难说。我同意,但也许在实现中有一些东西阻止了它们成为const,并且它们不想增加隐藏的开销。现在我们有了关键字,但我认为它比这个API年轻 或者API的设计者可能是(有时是惊人的大的,IMO)的C++开发人员,他们对代码< CONST 关键字怀有敌意,只会让事情变得更难使用。我不是Windows历史学家,所以我不能告诉你。:) 有缺陷的API

为什么它们不是常数

我相信这是有缺陷的API设计。还是我遗漏了什么

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


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


或者API的设计者可能是(有时是惊人的大的,IMO)的C++开发人员,他们对代码< CONST 关键字怀有敌意,只会让事情变得更难使用。我不是Windows历史学家,所以我不能告诉你。:)

有缺陷的API设计?C风格的C++标题?是谁带我们来的?不,不可能


<> P>严重的是,不要期望在任何Win32 API中使用高级C++,或者不要超过C样式句柄的基本包装。Habor萨特一直忙于.NET:ING C++,而不是改进微软库设计。这是我所见过的微软的近况,这导致了一个相当隐晦的存在

严格地说,您可能是对的-变量应该是常量

我假设你在谈论GDIPLUS C++的本地API。如果您研究这段代码和Gdiplus类的实现,您会发现大部分代码都是围绕Gdiplus平面API函数()的基本包装。这可能会使代码常量变得不正确。。。或者(正如另一个人暗示的那样)微软通常不是非常现代的C++


编辑:查看Gdiplus::Image::GetWidth()的代码(在GdiPlusBitmap.h中),MS很容易使用const修饰符实现许多函数。他们已经用Image::GetType()完成了这项工作,其中的代码与Image::GetWidth()、Image::GetHeight()几乎相同。

好吧,有些确实有常量修饰符:Image::GetType()constRe:EDIT。在阅读GDI+源代码时,我有恒定的WTF
UINT GetWidth() const;
UINT GetHeight() const;
...