32得票7回答
库设计:允许用户在“仅头文件”和动态链接之间进行选择?

我创建了几个C++库,目前它们都是仅头文件的。我的类的接口和实现都在同一个.hpp文件中编写。 最近我开始思考这种设计不是很好: 如果用户想要编译并动态链接库,则无法使用。 更改单行代码需要重新编译依赖于该库的现有项目。 尽管我非常喜欢仅头文件库的优点:所有函数都可能被内联,而且它们...

30得票5回答
.NET 中的只读(readonly)/常量(const)在哪里?

在C++中,您会经常看到void func(const T& t)。然而,在.NET中我没有看到类似的东西。为什么呢? 我注意到有很多使用struct的参数。但是我没有看到带有readonly/const的函数。事实上,现在我尝试了一下,我无法使用这些关键字来创建一个承诺不修改传递进...

25得票5回答
为什么.Net框架没有优先队列类?

有一些关于在 .Net 和 C# 中实现优先队列的线程在 Stack Overflow 上。 我的问题更基础:为什么 .Net 框架中没有一个开箱即用的优先队列?即使 C++ 标准库也有一个。

18得票9回答
使用C和C++接口编写库,应该采用哪种方式进行封装?

当准备一个库(我们称之为libfoo)时,我面临着以下两难选择:是将其编写为带有 C 包装器的 C++ 库:namespace Foo { class Bar { ... }; } /* Separate C header. #ifdef __cplusplus omitte...

18得票2回答
Function.const的目的是什么?

这段代码是关于Scala函数库文档中的一部分,但是没有太多的说明。似乎它总是返回第一个参数。 例如Function.const(1)(2)返回1。 为什么会有这个函数以及它有什么用处呢?

17得票1回答
std::multiplies和std::divides为什么要使用第三人称?

今天我们发现,用于乘法和除法的函子被称为std::multiplies和std::divides,而不是例如std::multiply和std::divide。 这至少令人惊讶,考虑到std::plus和std::minus没有以同样的方式构造。 这种差异是否有特定原因?

16得票2回答
为什么std::fstream以其特有的方式设置EOF位?

最近我遇到了一个问题,原因是使用了 fstream::eof()。我从这里读取了以下内容: 如果已经读到了关联输入文件的结尾,则函数 eof() 返回 true;否则返回 false。 由此(错误地)推断出,如果我使用 fstream::read() 并且读取超过文件的结尾,函数 ...

16得票4回答
为什么通用的IList<>不继承非通用的IList

IList&lt;T&gt;不继承IList,而IEnumerable&lt;out T&gt;继承IEnumerable。 如果只有out修饰符是唯一的原因,那么为什么大多数IList&lt;T&gt;的实现(例如Collection&lt;T&gt;,List&lt;T&gt;)实现了I...

15得票3回答
为什么TStringList有BeginUpdate和EndUpdate方法?

我知道在VCL控件(例如TListBox)中使用BeginUpdate和EndUpdate可以加快将Items添加到控件的过程,因为它会阻止控件被重绘,直到调用EndUpdate。 示例:procedure TForm1.AddItems; var i: Integer; begin ...

15得票1回答
为什么std::count(_if)返回iterator::difference_type而不是size_t?

可能是重复问题: 为什么标准C++算法“count”返回ptrdiff_t而不是size_t? C++标准库中有一个算法std::count/std::count_if。template&lt;class InputIterator, class T&gt; typename i...