我想学习一段时间的C ++,并在高中学习了AP Computer Programming(当时是C ++而不是Java)。我喜欢C语言,却没有时间学习C ++,否则我会回到C#那里,我的工作效率更高。
我的问题是:鉴于C ++ '11已获得批准(尽管我知道尚未完全实现),这是否会改变我学习C ++的方式?我拥有1998年的C ++:Herb Schildt的《完全参考》。新批准的标准是否使从此类书籍中学习比某些包含该标准内容的较新教程/书没有那么重要?从旧书中学习有什么好处吗?
我想学习一段时间的C ++,并在高中学习了AP Computer Programming(当时是C ++而不是Java)。我喜欢C语言,却没有时间学习C ++,否则我会回到C#那里,我的工作效率更高。
我的问题是:鉴于C ++ '11已获得批准(尽管我知道尚未完全实现),这是否会改变我学习C ++的方式?我拥有1998年的C ++:Herb Schildt的《完全参考》。新批准的标准是否使从此类书籍中学习比某些包含该标准内容的较新教程/书没有那么重要?从旧书中学习有什么好处吗?
Answers:
绝对。这些天,通常在第2课中出现的三件事应该移动很多,要晚得多:
通常在第99课中出现的这些内容应该早得多移动
Evey原始指针应立即提供给智能指针包装器(我将从共享开始,稍后再考虑唯一性,因为它需要解释std :: move和rvalue引用)。这样做将使学习C ++的感觉很像学习Java或C#,在那里您可以同时学习该语言和库。它也将占用大量的内存工作,并使人们不必担心陷阱。
我也想在我们第一次遍历一个集合并对每个元素做一些事情时,将lambda应用于图片。
免责声明:我现在正在使用Pluralsight编写C ++课程。最后一个模块是“理解别人的代码”,在这里我将放置诸如char *字符串,手动内存管理,指针算术等令人困惑的内容。
更新:一些人问为什么C ++ 0x的存在会启发人们用C ++ 03可以教的东西。我认为这是很多事情:
>>
正确解析这样琐碎的事情也消除了在声明一些模板模板时可能存在的陷阱我的看法是,前一段时间我们在讲授C ++的方式上可能有一些变化,但是我们当中有些人因为我们仍然需要传统的回退方式而退缩,或者因为讲授它涉及的内容很多奥秘的知识。
std::for_each()
将会比以前流行得多auto
,并且非常重要,并且新的函数声明语法(与结合使用decltype
)将在模板代码中大量使用。这些都是当前的C ++书所没有的东西。但是,是的,总的来说,我同意您(+1
)的意见。当我开始开设C ++课程时,我从Accelerated C ++开始,尽管我的课程开始越来越偏离它,但它仍然适用于基本原理。
是的,是的。一个简单的事实是,在C ++ 98和03中,由于诸如函数式编程的语言支持质量较差,因此许多良好实践根本上是无法使用的。现在,lambda已经存在并且可以工作,人们倾向于接受功能性接口的能力比以前好得多,并且通用编程甚至比以前更强大。
1998年,人们才刚刚开始发现如何使用C ++编写高质量,安全,快速的代码,而很多代码就是“ C是类”。在C ++ 11,这是非常不同-成语比如复制和交换和三(现五)的规则是众所周知的定义,以及更多的资源管理类型已经成为标准,像shared_ptr
和unique_ptr
在以前的标准只是给他们留下作为大洞。
您可以查看此问题,以获得有关C ++的参考资料的出色清单。
+1
从我。
我不知道您提到的具体书。但总的来说,您可以说,关于C ++语法,数据类型和OOP的所有基础知识仍然适用。大多数初学者书籍中提到的STL库也应如此。
尽管一本书的历史可以追溯到1998年,但可能错过了C ++编程风格的一些更新和发展,但这些年来积累了很多。我会寻找更多最新资源。有足够多的免费在线教程和文档为您提供一个良好的开端。其中一些甚至可能提到C ++ 0x。
C ++ 0x肯定会在将来改变程序员如何看待和使用该语言。但这会影响更复杂的项目,在这些项目中新功能才有意义。对于初学者而言,这无关紧要,您可以集中精力熟悉现有的概念,这已经足够学习。例如,大多数初学者的书都没有深入介绍模板,因此您现在不需要了解新的可变参数模板。
cprogramming.com
。
当然,对于任何与技术相关的事物,始终使用最新材料始终是明智之举,但是,C ++ 11中引入的更改并不是为了顺其自然。如果您不熟悉C ++(或一般编程),那么我就不必担心。
此外,如果您是专业的程序员,那么您可以打赌将来会使用别人的代码,因此即使工作中折旧的技术,了解事物的工作方式也总是有价值的。
auto
和异步函数执行除了“摇摇欲坠”之外,怎么做?