这个问题试图收集每年出版的数十本不良C++书籍中的少数珍珠.
与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C++,而无需学习编写精良的C++书籍.这样做太复杂了.事实上,它是如此庞大和复杂,有很多非常糟糕的C++书籍.我们并不是在谈论糟糕的风格,而是体育明显的事实错误和促进糟糕的编程风格.
请编辑接受的答案,以提供高质量的书籍和近似的技能水平 - 最好 在 C++聊天室讨论您的添加后.(如果他们不同意建议,常客可能会毫不留情地撤销你的工作.)添加一篇关于你亲自阅读/受益的每本书的简短描述/描述.随意讨论质量,标题等.符合标准的书籍将被添加到列表中.由C和C++用户协会(ACCU)撰写评论的图书都有指向评论的链接.
*注意:常见问题和其他资源可以在C++标签信息和c ++ - faq中找到.
对于这个问题,这可能不是一个非常合适的论坛,但是让我试一试,冒着被搬走的风险.
C++标准库有几个参考,包括非常有价值的ISO标准,MSDN,IBM,cppreference和cplusplus.就个人而言,在编写C++时,我需要一个具有快速随机访问,短加载时间和使用示例的引用,并且我一直在发现cplusplus.com非常有用.但是,我一直在SO上听到关于该网站的负面看法,所以我想具体说明:
cplusplus.com提供的错误,误解或错误建议有哪些?使用它来做出编码决策有哪些风险?
让我补充一点:我希望能够通过标准的准确报价在这里回答问题,因此我想发布可立即使用的链接,而cplusplus.com将是我选择的网站,如果不是这个问题.
如何将类对象(尤其是STL对象)传递给C++ DLL?
我的应用程序必须以DLL文件的形式与第三方插件交互,我无法控制这些插件构建的编译器.我知道STL对象没有保证ABI,我担心我的应用程序会导致不稳定.
据我所知,引入了C++ 14 std::make_unique,因为由于没有指定参数评估顺序,这是不安全的:
f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A
Run Code Online (Sandbox Code Playgroud)
(说明:如果评估首先为原始指针分配内存,则g()在std::unique_ptr构造之前抛出调用和异常,然后内存泄漏.)
呼叫std::make_unique是一种约束呼叫顺序的方法,从而使事情变得安全:
f(std::make_unique<MyClass>(param), g()); // Syntax B
Run Code Online (Sandbox Code Playgroud)
从那以后,C++ 17澄清了评估顺序,使得Syntax A也安全,所以这里是我的问题:在C++ 17中仍然有理由使用std::make_uniqueover std::unique_ptr的构造函数吗?你能举一些例子吗?
截至目前,我能想象的唯一原因是它只允许输入MyClass一次(假设您不需要依赖多态std::unique_ptr<Base>(new Derived(param))).但是,这似乎是一个非常弱的原因,特别是当构造函数std::make_unique不允许指定删除器时std::unique_ptr.
而且为了清楚起见,我并不是主张std::make_unique从标准库中删除(至少为了向后兼容而保持它有意义),而是想知道是否仍然存在强烈倾向于它的情况std::unique_ptr
我正在寻找一些新的库以及C和C++.在过去的大部分时间里,我"偶然"偶然发现了一些 - 他们中的大多数人在我参与的项目中都有很好的用处.
库应该在Mac OS X和Linux/POSIX上运行,也可能在Windows上运行.
这应该标记为社区维基.如果您有兴趣添加,请更新!
谢谢!
我不是在寻找像Boost或STL这样的"生产力"库.相反,我正在寻找随机类型的"有趣的新东西" - 无论是图形库,脚本库,网络甚至MOD/MIDI播放库.对不起,我之前没说清楚.
(当我说STL时,我说的是围绕容器,迭代器,算法和仿函数的模板库.)
在认为std::string大多数行为像普通容器,带有begin和end函数(包括迭代器)之后,我想到了这个问题.一个size通过它们的迭代(例如,功能,并使用所有这些对于在容器上的工作正常STL算法的可能性/范围transform,sort,find等等).
然而,与此同时,它本身并不是容器,因为它不适合存储任意数据的容器.此外,它包含的数据操作主要是通过成员函数一样substr,find_first_of等等,而真正的容器不这样做,让算法处理的.
此外,cplusplus参考站点和C++标准不会std::string与真实容器一起列出,而是列在一个不同的类别中.
但是,在SGI的STL站点上,basic_string(并因此stringtypedef)与另一个容器一起提及,并且basic_string引用站点声明它属于"容器"类别.
现在我的问题是,string实际上是STL的一部分还是它本身就是一个独特的库?
如果它现在属于STL,它在Stepanov开发的原始STL中是否有所不同?
性能如何std::mutex相比CRITICAL_SECTION?它是否相提并论?
我需要轻量级同步对象(不需要是一个进程间对象)是否有任何接近CRITICAL_SECTION其他的STL类std::mutex?
为什么std::string尺寸由sizeof(std::string)屈服确定8?
我认为这应该不仅仅是8因为它必须有一个int(sizeof(int) == 8在我的机器上)数据成员给予std::string::length()和std::string::size()在O(1)和可能是一个char*字符.
当我尝试使用接受"general iterator"的ctor编写C++类模板时,会出现此问题.我不知道在这里使用general这个词是否合适,但我的意思是它可以像STL容器一样接受迭代器.
换句话说,我对迭代器感到困惑.似乎所有STL容器都具有相同类型的迭代器,那么该类型是什么?它只是指针吗?还是更复杂的东西?但是STL容器确实接受普通指针.
(我想将它与Iterator<T>in 进行比较Java,这很简单,只是一个类)