4

为什么他们不是常量?

我相信这是有缺陷的 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 一直忙于 .NET:ing C++,而不是改进 Microsoft 库设计。WTL与我所看到的 Microsoft 接近现代 C++一样接近,而这导致了一个相当模糊的存在。

于 2009-03-11T09:33:45.417 回答
2

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

或者,API 的设计者可能属于(有时非常大,imo)一群对const关键字怀有敌意的 C++ 开发人员,他们认为这只会让事情变得更难使用。我不是 Windows 历史学家,所以我不能告诉你。:)

于 2009-03-11T09:33:16.587 回答
1

严格来说你可能是对的 - 变量应该是 const。

我假设您正在谈论 Gdiplus C++ 本机 API。如果您查看此代码和 Gdiplus 类的实现,您会发现大部分代码是 Gdiplus Flat API 函数的基本包装(http://msdn.microsoft.com/en-us/library/ms533969 (VS.85).aspx)。这可能会使代码变得 const-correct 变得困难......或者(正如另一个人所暗示的)微软通常不是非常现代的 C++。

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

于 2009-03-12T22:45:35.023 回答