Questions tagged «c++»

有关C ++的问题,C ++是一种静态类型,自由格式,多范式,已编译的通用编程语言。

11
“ blub悖论”和c ++
我在这里阅读文章:http : //www.paulgraham.com/avg.html,有关“ blub悖论”的部分特别有趣。作为主要使用c ++编写代码但接触过其他语言(主要是Haskell)的人,我知道这些语言中的一些有用的东西很难在c ++中复制。问题主要是针对精通c ++和其他某种语言的人,您是否使用某种强大的语言功能或惯用语言,如果仅使用c ++编写则很难概念化或实现? 特别是这句话引起了我的注意: 通过归纳法,唯一能够看到各种语言之间功能差异的程序员就是那些理解能力最强的程序员。(这可能是Eric Raymond所说的Lisp,使您成为更好的程序员的意思。)由于Blub悖论,您不能相信其他人的意见:他们对碰巧使用的任何语言都感到满意,因为它决定了语言的正确性。他们对程序的思考方式。 如果事实证明我等同于使用C ++的“ Blub”程序员,那么就会引发以下问题:如果您遇到过其他语言所遇到的有用概念或技术,您会发现很难概念化在用C ++编写或“思考”? 例如,可以使用Castor库在c ++中实现在Prolog和Mercury等语言中看到的逻辑编程范例,但最终我发现从概念上讲,我在考虑Prolog代码,并在使用时转换为c ++等效语言。为了扩大我的编程知识,我试图找出是否存在其他类似的有用/强大习语示例,它们可以用其他语言更有效地表达,而我可能不是C ++开发人员。我想到的另一个例子是lisp的宏系统,从程序内部生成程序代码似乎对某些问题有很多好处。这似乎很难在c ++中实现和考虑。 此问题并非旨在进行“ C ++ vs Lisp”辩论或任何形式的语言战争类型辩论。提出这样的问题是我发现有可能找出我不知道的事情的唯一途径。

6
使用TDD的复杂代码的好例子[关闭]
在大型,现实生活中,复杂的项目中使用TDD的一个很好的例子是什么?到目前为止,我所看到的所有示例都是出于书籍或纸张目的的玩具项目... 您能命名一个使用TDD的开源项目吗?最好使用C ++,但我可以阅读Java和C#或其他类似语言。
37 java  c#  open-source  c++  tdd 

10
我是初学者。我可以直接开始学习C ++ 11吗?还是我必须学习旧的C ++?[关闭]
我是一个初学者,对编程只有很少的知识。 如果我直接从涵盖新C ++ 11的书中学习C ++,还是应该学习旧的最好的C ++书,那会很好吗? 在学习C ++ 11之前,我应该对C ++有所了解吗?还是我可以直接从那里开始? 如果我直接从C ++ 11开始,会引起问题吗?如果否,则建议一些有关C ++ 11的书籍。
36 c++  c++11 

2
Rust如何与C ++的并发功能相区别?
问题 我试图了解Rust是否从根本上充分改善了C ++的并发功能,以便决定我是否应该花时间学习Rust。 具体来说,惯用的Rust如何改善惯用的C ++的并发功能,或以任何方式背离? 改进(或分歧)主要是句法上的,还是范式上的实质改进(分歧)?或者是别的什么?还是根本就没有改善(分歧)? 基本原理 最近,我一直在尝试自学C ++ 14的并发功能,感觉有些不对劲。感觉有些不对劲。什么感觉了吗?很难说。 当涉及到并发时,似乎编译器似乎并没有真正在帮助我编写正确的程序。感觉好像我在使用汇编程序而不是编译器。 诚然,当涉及到并发时,我完全有可能遭受一个微妙的,错误的概念。也许我还没有摆脱Bartosz Milewski在有状态编程和数据竞赛之间的紧张关系。也许我不太了解编译器中有多少合理的并发方法以及操作系统中有多少并发方法。
35 c++  concurrency  rust  c++14 

9
算法比编程语言重要吗?
在当前(2013年)的Google Code Jam竞赛中,与仅使用40行代码即可解决同一问题的Python人员相比,C ++和Java人员花费了200多行代码。 Python不能直接与C ++和Java相提并论,但是我认为冗长程度的差异可能会对算法的效率产生影响。 与选择语言相比,知道正确的算法有多重要?能否以更好的方式(使用相同的算法)以C ++或Java来实现出色实现的Python程序,这是否与某些编程语言的自然冗长性有关?
35 java  c++  algorithms  python 

4
如何切换到C ++ 11?
我已经用C ++编程了一段时间了,但是大多数事情都围绕着C ++的低级功能。我的意思是主要使用指针和原始数组。我认为这种行为被称为将C ++与类一起使用。尽管如此,我最近才第一次尝试C。我很惊讶地发现C#和Java之类的语言如何在便捷的标准库类(如字典和列表)中隐藏这些细节。 我知道C ++标准库也有许多容器,例如矢量,映射和字符串,而C ++ 11仅通过具有std :: array和ranged循环来增加了它。 我如何最好地学习如何利用这些现代语言功能以及哪些功能适合哪些时间?如今,C ++中的软件工程大部分都不需要人工进行内存管理吗? 最后,我应该使用哪个编译器来充分利用新标准?Visual Studio具有出色的调试工具,但即使VS2012似乎也具有糟糕的C ++ 11支持。
35 c++  c++11 

3
OO中传递的消息是什么?
我一直在研究OO编程,主要使用C ++,C#和Java。我以为我对封装,继承和多态性有了很好的了解(以及在此站点上阅读了很多问题)。 似乎突然出现的一件事是“消息传递”的概念。显然,在以当今主流语言进行OO编程时,并没有使用此方法,但是Smalltalk支持了这种方法。 我的问题是: 什么是消息传递?(有人可以举一个实际的例子吗?) C ++,C#或Java是否支持这种“消息传递”?
35 java  c#  c++  object-oriented 

17
向初中的高中生讲授C ++:划清界限?
我将指导一组高中生参加FIRST机器人大赛,这里的大多数团队都使用C ++开发他们的机器人软件。对于团队中的许多学生来说,这将是他们的编程入门。我不会选择C ++向高中生教授编程(例如,我认为使用Python或Javascript会更容易),但是选择已经确定。 我想教给他们适当的C ++(即避免使用混合的C / C ++方言,即C +),但是我不想以不必要的复杂性来吓them他们。对于这个问题: 我应该从第一天开始使用STL,尤其是。vector还是只坚持使用标准阵列?数组更易于引入,但指针错误可能更难捕捉。 对于I / O,我应该坚持使用cout等等,还是您认为printf它更容易学习? 是否有适合这些年轻人使用的C ++在线资源? 谢谢! 编辑:感谢这么多出色的答案。除了很多人建议的“ 加速C ++”外,我还发现“ C ++ For Everyone”是一本很好的书。
35 c++ 

13
C ++中最差的做法,常见错误[关闭]
在阅读了Linus Torvalds的这本著名的文章之后,我想知道C ++程序员的真正陷阱是什么。我明确不是在这个问题及其答案中提及错别字或不良的程序流,而是指编译器未检测到的更高级错误,这些错误不会在首次运行时导致明显的错误,完整的设计错误,在C中不可能实现的事情,但是可能由不了解其代码的全部含义的新手在C ++中完成。 我也欢迎回答指出通常不会出现的巨大性能下降。我的一位教授曾经告诉我有关我编写的LR(1)解析器生成器的示例: 您使用了太多不必要的继承和虚拟性实例。继承使设计更加复杂(由于RTTI(运行时类型推断)子系统,因此效率低下),因此仅应在有意义的地方使用它,例如,用于解析表中的操作。因为您大量使用模板,所以实际上不需要继承。”

10
难道“总是初始化变量”会导致重要的错误被隐藏吗?
C ++核心准则具有ES.20规则:始终初始化一个object。 避免使用预先设置的错误及其相关的未定义行为。避免理解复杂的初始化问题。简化重构。 但是,此规则无助于发现错误,只会将它们隐藏起来。 假设程序具有执行路径,在该路径中使用未初始化的变量。这是一个错误。除了不确定的行为外,这还意味着出现了问题,程序可能无法满足其产品要求。当将其部署到生产中时,可能会造成金钱损失,甚至更糟。 我们如何筛选错误?我们编写测试。但是测试不能覆盖100%的执行路径,测试也不能覆盖100%的程序输入。不仅如此,即使测试覆盖了错误的执行路径-它仍然可以通过。毕竟,这是未定义的行为,一个未初始化的变量可以具有一个有效值。 但是除了测试外,我们还有一些编译器,它们可以将0xCDCDCDCD写入未初始化的变量。这会稍微提高测试的检测率。 更好的是-有诸如Address Sanitizer之类的工具,它将捕获所有未初始化内存字节的读取。 最后是静态分析器,它可以查看程序并告诉您该执行路径上有一个先读后设置的内容。 因此,我们有许多功能强大的工具,但是如果我们初始化变量清理器,将一无所获。 int bytes_read = 0; my_read(buffer, &bytes_read); // err_t my_read(buffer_t, int*); // bytes_read is not changed on read error. // It's a bug of "my_read", but detection is suppressed by initialization. buffer.shrink(bytes_read); // Uninitialized bytes_read could be detected here. // …
35 c++  c 

6
什么时候应该在C ++中使用布尔值?
我们为班级分配了一个作业,在那里我们必须创建一个Tic-tac-toe游戏。人们喜欢使自己复杂化,因此他们编写了包含菜单的复杂游戏。游戏结束时,您必须选择再次播放或退出程序。我int为此使用了一个变量,但我注意到一些同学在使用BOOL。 效率更高吗?将答案仅存储在一个值中int而不是将其存储在布尔值中,有什么区别?这些变量的确切目的是什么?
34 c++  boolean 


12
将通用对象存储在容器中然后从容器中获取对象并向下转换对象是否有代码味道?
例如,我有一个游戏,其中有一些工具可以提高玩家的能力: Tool.h class Tool{ public: std::string name; }; 和一些工具: 剑 class Sword : public Tool{ public: Sword(){ this->name="Sword"; } int attack; }; 盾 class Shield : public Tool{ public: Shield(){ this->name="Shield"; } int defense; }; 魔术衣 class MagicCloth : public Tool{ public: MagicCloth(){ this->name="MagicCloth"; } int attack; int defense; }; …

3
C ++ 11是否解决了在动态/共享库边界之间传递std lib对象的问题?(即dll等)?
我对C ++的主要抱怨之一是在实践中将标准库对象传递到动态库(例如dll / so)边界之外有多么困难。 std库通常是仅标头的。这非常适合进行一些很棒的优化。但是,对于dll,它们通常是用不同的编译器设置构建的,这可能会影响std库容器的内部结构/代码。例如,在MSVC中,一个dll可能会在打开迭代器调试的情况下构建,而另一个dll会在关闭调试器的情况下构建。这两个dll可能会遇到传递标准容器的问题。如果std::string在界面中公开,则不能保证客户端使用的代码与std::string库的完全匹配std::string。 这导致难以调试问题,头痛等。您要么严格控制组织中的编译器设置以防止出现这些问题,要么使用没有这些问题的更简单的C接口。或向您的客户指定他们应使用的预期编译器设置(如果另一个库指定了其他编译​​器设置,则很糟糕)。 我的问题是C ++ 11是否试图做任何事情来解决这些问题?
34 c++  libraries  c++11 

5
如何创建和执行例外合同?
我试图说服我的团队领导者允许在C ++中使用异常,而不是返回isSuccessful带有错误代码的布尔值或枚举。但是,我不能反驳他的批评。 考虑这个库: class OpenFileException() : public std::runtime_error { } void B(); void C(); /** Does blah and blah. */ void B() { // The developer of B() either forgot to handle C()'s exception or // chooses not to handle it and let it go up the stack. C(); }; …
33 c++  exceptions 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.