我是初学者。我可以直接开始学习C ++ 11吗?还是我必须学习旧的C ++?[关闭]


36

我是一个初学者,对编程只有很少的知识。

如果我直接从涵盖新C ++ 11的书中学习C ++,还是应该学习旧的最好的C ++书,那会很好吗?

在学习C ++ 11之前,我应该对C ++有所了解吗?还是我可以直接从那里开始?

如果我直接从C ++ 11开始,会引起问题吗?如果否,则建议一些有关C ++ 11的书籍。


18
为什么有这些负面点?这个问题已经回答了吗?新手是否可以提问?有人对此事进行研究吗?我认为最好的方法之一就是向有更多经验的人询问。+1,因为新手也应得到指导
adosaiguas 2012年

12
@Simon在我看来是关于软件开发的概念性问题:我从哪里开始?您怎么知道他不是专业程序员?;)
adosaiguas 2012年

4
@MSalters谈论书籍;加速的C ++是一本很棒的书,尽管有些简化。芭芭拉·E·穆Barbara E. Moo)是一位了不起的作家,她在这本书上的影响力显而易见。但是这本书确实 “旧的”。但是,并非所有希望都消失了-LippmanLajoieBarbara E. Moo撰写了一本极受好评的书,名为C ++ Primer,该书的第五版于本月(2012年8月)出版,从我阅读的前几章中复制,这是一本涵盖C ++ 11 的优秀书籍。再次出现了Moo的影响。在技​​术写作方面,她是个女神。
zxcdw

2
@Simon Programmers — Stack Exchange is a site for professional programmers...在这种情况下,您介意将我引导给初学者的网站吗?我也是编码新手,我将有一些基本问题……
Jeyekomon 2014年

2
我认为由于FAQ(常见问题解答),这个问题显然是题外话(也许不是当时有人问过)。它询问“下一步我应该选择哪种语言(版本)”,它涉及教育建议,并询问超额资源-这是标准关闭的三个原因。
Doc Brown

Answers:


38

有很多可用性增强功能,使C ++ 11对于初学者尤其是具有其他语言经验的初学者更加容易理解。C ++ 11中的其他更改仅对高级用户有意义,因此,如果您选择一本旨在教授各种差异的书籍,您可能会不知所措。确保您所获得的任何书籍都是为C ++的初学者设计的。

话虽这么说,您最终可能必须学习旧的方法,因为那里有很多现有的代码,如果程序员选择这样做,即使新的C ++ 11代码也将包含旧的方法。我写C ++是为了谋生,而我的公司甚至还没有评估 C ++ 11兼容的编译器,更不用说在生产中使用编译器了。


我从C ++入门手册第4版中学习。好书开头?
Dhananjay 2012年

1
它获得了很好的评价,而且看上去处于正确的水平,但是很长一段时间以来我都没有看过初学者级的C ++书籍,所以我不是最好的人。但是,我想如果需要C ++ 11,则需要第5版。
卡尔·比勒费尔特

好的,是的,我知道第五版涵盖了c ++ 11。
Dhananjay

10

您无需使用旧的C ++即可开始使用C ++ 11,C ++ 11中有新功能,但使用是可选的。知道如何使用C ++ 11功能可能是一个优点,一旦您知道较早版本的特性,在使用旧版(pre 11)代码库时当然就不会成为缺点。

学习C ++是开始学习的好地方,并且在您学习了基础知识之后,附录B将教您C ++ 11的功能。

我可以看到为什么有人建议将Java / CSharp等作为更容易的替代语言,但是在转向CSharp之前我学到了一些C ++,因此我并不是一个更糟糕的程序员,相反,编程技能比语言更深入语法/功能以及扎实的C ++基础,您可以轻松学习任何其他命令式OOP语言。


8

很难说。

旧的C ++更像是一个雷区,很高兴学习如何导航这样的野兽。它还将使您理解为什么事情按原样完成,以及不同结构的含义。

再说一遍,编写代码不是您想要的旧C ++。

但是话又说回来,旧的C ++会在许多行业中持续20年。

我喜欢C ++ 11,但目前仅在初创企业中可用。不在大型遗留代码库中。直接跳到C ++ 11可能会使您在讨厌的C ++部分中掌握未开发的技能。一旦某些高级C ++ 11构造泄漏或崩溃,将适得其反,因为它以语法上正确但逻辑上不正确的方式使用。


除了利基嵌入式系统领域之外,为什么行业的主要部分不会在那里更新编译器?有风险(即使有单元测试)?保守主义?
TheLQ 2012年

1
@TheLQ:我想...但是当我认为如果我是老板会做什么,我很有可能会做同样的事情。除非有一些明显的成本节省与迁移成本的比较。
编码器

1
@TheLQ:是的,代码库需要转移到较新版本的编译器。很少有项目会采用Willy Nilly的新编译器版本。一个新项目更有可能使用一个新的编译器(只要它不与旧代码交互)。
马丁·约克

1
@Coder:是什么使C ++ 11与C ++ 03有所不同,那就是学习它不会直接转换为C ++ 03。有几个新功能使编写起来更容易,但是没有什么可以阻止您进入这些雷区。
2012年

1
@TheLQ:是的,基本上是过程,但是您忘记了集成测试(最复杂的部分。并非所有应用程序都是独立的(事实上,我认为这是少数))。您需要验证所有代码都能正常工作并且能够正确交互(不仅与您的代码而且与客户代码)。如果不进行测试和验证,这是一个数月的过程。如果您的某些客户不打算使用C ++ 11,那么您可能需要在某些系统上维护这两个版本(幸运的是,gcc具有向后兼容性,但是并不是所有C ++编译器供应商都很好)。
马丁·约克

8

尽管中有许多改进C++11C++但仍然不是一门简单的语言。Java尽管不像某些人想象的那样难用,但它仍然是一种更简单的语言,具有很好的性能(通常几乎与一样快C++),并且提供了更好的IDE(也许Visual C++与当前的Java IDE一样好,但是在Linux上运气不佳),这在很大程度上更全面的标准库(JDK),更多的库(例如HibernateSpringJEELucene等)并且没有内存泄漏(嗯,几乎没有)–您仍然可以在Java中建立内存泄漏,但是这样做更加困难比C++)。公平地讲,使用modern C++11,可以避免内存溢出。

C ++ 11具有许多很酷的功能,例如lambda,auto关键字,移动语义等等。绝对是比以前更好的语言C++98。请参阅Herb Sutter的概述,以了解C++11:现代C++风格的元素。

综上所述,我认为每个人都应该至少学习一些C++。如果你一直在编程JavaScalaRubyPython在过去十年中,从来没有触及C或者C++,现在C++11我觉得是时候来学习C++11和提高你的编程技能,而这样做。

C++在未来的几年中,我可能不会在工作上使用太多,并且当我需要比更加强大的语言时Java,我可能会选择Scala,但是我将仔细研究C++11并尝试学习和理解新功能,特别是有关多线程和并发的内容。

切记:即使您不打算在生产中使用新的编程语言,它也总是有助于学习新的编程语言。


1

深吸一口气,阅读Peter Norvig的这篇文章

你读过吗?好的,如果您是初学者,则需要从头开始。-在此处插入语言-可以稍后再来,请查看CourseraUdacity以获得一些初学者的计算机科学入门课程。

完成此操作后,如果您设置为“ C”语言,我建议您慢慢使用K&R的The C编程语言。

根据基础进行工作,其余的将及时处理。


10
我看不出这是对所提问题的答案。C甚至与C ++都不一样。
vartec

1
但是C ++基于C,并且在很大程度上是向后兼容的:绝大多数现代C语法直接适用于C ++。由于C比任何版本的C ++都简单,因此学习C首先可以为您提供有关C ++基本语法和语义的很好的连贯知识-并有助于解释在更大的语言上某些原本
无法

2
@comingstorm C程序员应该做的第一件事是,不了解他对C的几乎所有知识,然后开始学习C ++。有细微的差异可能会咬你。
2014年

1
再加上惯用的现代C ++代码除了语法之外,没有从C中借用太多东西。好像我们仍然没有使用C字符串和malloc / free一样。作为一个完整的初学者到语言你最好还是拿起了一本书像C ++入门第5版,加速了C ++等闷头C.
bstamour

1

最近有关C ++的入门书籍也越来越多地涵盖C ++ 11。在使用脚本语言工作了十年之后,我读了Sam的《自学C ++》,但在使用C / C ++之前,已经阅读了近十年,发现它确实很有帮助。我很快就熟悉了C ++(包括许多STL)的中心思想,并且意识到很多细节,这些细节在C ++ 11中是不同的。

正如一些其他海报提到,C ++ 11在很多方面比旧标准更容易使用脚本式的加法一样autofor(int &i : m_vector){}等等。所以,如果你的“小知识”来自像Python或Matlab语言,你会发现C ++ 11比早期的标准要“自然”得多。

我还要指出,到现在为止,C ++ 11的编译器兼容性已经(几乎)完成,因此拥有“过时的编译”代码不再是问题。

简而言之,做到这一点。


-1

在我的时间里,C被认为是C ++的先决条件,尤其是对于那些编程初学者而言。因为您必须弄清楚一种语言的作用以及设计这种语言的原因。C拥有大量优秀而充分的编程语言思想,这些思想永远不会过时。因此,我相信这是最好的开始。

在掌握了有关编程知识的一些基本观点之后,您可能必须选择下一步要做的事情,这意味着选择一种语言,以尽可能深入地学习。不管您有多深的语言,它通常都可以决定您对任何其他语言有多深的语言,这意味着,无论您学到了多少种语言,最深的语言永远是您挖出的第一种语言。对我来说,我已经对Java进行了研究,并独自制作了一些Java模型以更好地了解其内核功能。

之后,由于您完全了解编程语言的技术,因此您可能可以学习任何内容。我已经开始学习C#,Go,Python甚至Scala,并且已经完成了许多娱乐/工作项目。从开始学习语言到成为开发项目的1.0负责人,个人记录是3个月。

以我为例,距我的第一个程序已有15年了,我什至不记得它是什么。我相信,如果您足够努力,您一定会比我进步更快。


这不能回答所问的问题
t

完全抱歉。只是想说,都不是。最终想要学习什么都没有关系,只有编程语言的基础才能决定您在该领域的深入研究。同时,您必须花更多时间而不是快速拍摄。
WinstonWu 2014年

-2

作为一个初学者,我认为首先您必须了解C ++概念,因为C ++ 11都像一个新版本,但是C和C ++是任何类型开发的基础。学习了C ++之后,大多数概念都会自动清除。


1
欢迎来到程序员!我不确定您的答案是否会给这个问题带来太多帮助?从语法上讲有点混乱。我在听你想说的话时遇到麻烦。您能否扩展您的答案,或者添加示例说明C ++ 11为何如此不同以至于学习C和C ++标准的早期版本更好?
马丁·皮耶特

-3

C ++是一门非常强大的语言。但是,这也给程序员带来了很多责任。

如果您是编程的新手,请使用C#从此轻松生活。它的语法基于C ++,但是错误处理对初学者更友好,可以在出现问题时为您提供帮助。

如果您对方法,类,继承感到满意,并且希望在管理内存和系统资源比生产力更重要的环境中进行开发,那么C ++是一个不错的选择,我将从学习当前标准开始。切记,C ++要求您了解内存并积极地对其进行管理。在这里犯错,而您得到的只是要么是核心转储,要么您的数据包含没有意义的字节。通常,您发现问题所在的地方与实际原因无关。


1
如果以C#开头,他将习惯于进行高级编程(OOP,自动内存管理),而实际上不知道“幕后”发生了什么。如果那个人后来转到C ++,他将缺乏关于C / C ++的重要知识(我主要是在内存管理方面,但还有更多)。由于C ++和C#共享非常相似的语法,但实际上编译的代码完全不同,因此可能会产生更多误导。请记住,OP明确表示了他对C ++的兴趣。
Eti 2014年

OP还表示他们对编程知识不多。学习作为C ++的第一语言是巨大的挑战。选择您的战斗并选择一系列较小的战斗要好得多,因为您更有可能成功。
迈克尔·肖

-6

为什么要开始使用C ++?

我个人建议不要将C ++作为第一语言。这是棘手的,复杂的,困难的……与大多数其他编程语言相比,它的层次低得多且“不安全”。

我建议选择c#,java,python或javascript ...以及沿途的好书。您将拥有更多的乐趣。


3
我对此不以为然。从Java / C#/ python等简单的生活过渡到更复杂的C和C ++世界并不是那么容易。如果您真的想学习一种编程语言,那么学习C和C ++会很困难,但是会有所帮助。如果您以后要使用Java,C#,python等进行编程,则与将它们转换为C或C ++相比,更改要容易得多。简介:C / C ++较难入手,但将使更改为任何其他OO语言更加容易。
martiert 2012年

2
C ++是开始的最佳基础。编程很复杂,最后您必须使用硬件。C ++是一种令人惊奇的方法,可以开始学习这种方法,而不会产生错误的安全感。
编码员

操作者的问题完全取决于他/她的发展目的。
2012年

1
我不同意这一点。学习C ++具有许多优点,并且使学习其他语言(例如Java和C#)更加容易。
安东尼

2
@Dhananjay:C ++比Java困难很多... Java就像一辆婴儿车,是C ++的极其简化的版本。后者将是一辆没有刹车的简洁自行车。如果您已经很难理解Java,那么C ++会很痛苦。我的2美分。
dagnelies
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.