这个问题试图收集每年出版的数十本不良C++书籍中的少数珍珠.
与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C++,而无需学习编写精良的C++书籍.这样做太复杂了.事实上,它是如此庞大和复杂,有很多非常糟糕的C++书籍.我们并不是在谈论糟糕的风格,而是体育明显的事实错误和促进糟糕的编程风格.
请编辑接受的答案,以提供高质量的书籍和近似的技能水平 - 最好 在 C++聊天室讨论您的添加后.(如果他们不同意建议,常客可能会毫不留情地撤销你的工作.)添加一篇关于你亲自阅读/受益的每本书的简短描述/描述.随意讨论质量,标题等.符合标准的书籍将被添加到列表中.由C和C++用户协会(ACCU)撰写评论的图书都有指向评论的链接.
*注意:常见问题和其他资源可以在C++标签信息和c ++ - faq中找到.
可能重复:
const表示函数/方法签名后的含义是什么?
我在C++的后期阅读中遇到了很多函数(特别是在Boost上),它有一个我以前从未见过的符号.例如:
virtual void B() const;
Run Code Online (Sandbox Code Playgroud)
你可以看到我们在函数名后面有一个const!我已经看到const关键字主要是关于它们在函数中使用的函数返回值(或作为参数),但是这个是不同的.任何人都可以向我解释它是什么以及为什么我们使用它?还有什么不同于常规使用const函数?
int * const Function(int *const constantPointerToAnInteger, char const* pointerToAConstantChar);
Run Code Online (Sandbox Code Playgroud) 来自Herb Sutter的GotW#6
对于非内置返回类型,返回值通常应为const....
注意:Lakos(第618页)反对返回const值,并指出它对于内置函数来说是多余的(例如,返回"const int"),他注意到这可能会干扰模板实例化.
虽然Sutter似乎不同意在使用Lakos按值返回非构建类型的对象时是返回const值还是非const值,但他通常同意返回内置类型的const值(例如const int) )不是一个好主意.
虽然我理解为什么这是无用的,因为返回值不能被修改,因为它是一个右值,我找不到一个如何干扰模板实例化的例子.
请举例说明如何使用返回类型的const限定符可能会干扰模板实例化.
我知道extern C意味着函数应该用C风格编译但是extern function_datatype functionname是什么意思?
extern void sharelog(const char *rem_host, const char *username,
const char *, const char *,
const char *, const char *);
Run Code Online (Sandbox Code Playgroud)
没有"C"的extern是什么意思?
此外,在几乎每个程序的头文件中,我都看到了类似的东西
void sharelog(const char *rem_host, const char *username,
const char *, const char *,
const char *, const char *);
Run Code Online (Sandbox Code Playgroud)
如果在.c/.cpp文件中完成,为什么要再次声明该函数?它有时也会在没有它的论证的情况下宣布
int Function;
Run Code Online (Sandbox Code Playgroud)
此外,一些函数可以这样写:
int CSomething::Somefunction() const
Run Code Online (Sandbox Code Playgroud)
为什么在函数后添加const?
我也偶然发现了具有这些神秘点的功能
void function(int prio, const char *fmt, ...)
Run Code Online (Sandbox Code Playgroud)
还有很多其他的东西我也想问,但似乎我已经问过了.我知道有些人可能会说去学习C/C++,但是相信我,这些东西不是为初学者讨论的.