最近,我开始为未来的现行草案标准阅读(只是一点点)。
有许多新的功能,其中一些已经可以通过Boost Libs获得。当然,我对这个新标准非常满意,我想尽快使用所有的新特性。
不管怎么说,与一些朋友谈论这个草案,长期的C++开发人员,一些担心出现了.所以,我请你(回答):
1)语言本身
这个更新是巨大的,也许对于单个标准更新来说太大了。对于编译器供应商(即使他们中的大多数已经开始实现一些功能)来说,这是巨大的,但对于最终用户来说也是如此。
特别是,我的一个朋友告诉我“这是一种新的语言”。
2)语言知识
发布于 2009-05-07 15:16:21
总之,不,我们不能认为这是一种新的语言。这是同一种语言,新特性。但是,如果使用支持0x标准的编译器,而不是使用Boost库,它们现在将成为标准包含。
在使用支持新标准的编译器时,不必使用新标准。但是,如果正在开发的软件上存在某些约束,则必须学习和使用新标准,但这是对任何软件努力的限制。我认为0x标准带来的新特性将使做某些事情变得更容易,更容易出错,因此了解新特性是什么,以及它们将如何改进其未来工作的设计策略,对人们是有好处的。人们还必须学习它,这样在使用它开发软件时,他们就会了解发生了什么,而不会发出大的嘘声。
至于我会否“改用新标准”,如果这表示我会学习新的标准,并在适用的情况下使用,以及在提高生产力的地方使用,那麽,我当然会改变。但是,如果这意味着我将限制自己只使用0x标准的新特性,那么就不会,因为我的大部分工作涉及在标准之前编写的代码,重新设计所有使用新特性的内容将是一项艰巨的任务。不仅如此,它还可能带来新的but和性能问题,这是我在没有经验的情况下没有意识到的。
学习C++一直是程序员能够进行的更具挑战性的旅程之一。在语言中添加新的特性不会改变学习语法的难度,也不会改变如何有效地使用语法,但方法将发生变化。人们仍将了解指针及其工作方式,但也将了解智能指针及其管理方式。在某些情况下,人们会学到与以前不同的东西。例如,人们仍然需要学习如何初始化事物,但是现在他们将学习统一初始化和初始化列表作为主要的工作方法。在某些情况下,在函数声明中添加新的范围语法或自动返回类型可能更容易理解。我认为,总的来说,C++将变得更容易学习和使用,同时变得更容易教学。
掌握一门语言是一个长期的目标,它不可能在一夜之间完成.认为一个人能很快掌握像C++这样复杂的东西是很愚蠢的。需要实践、经验和调试代码,才能真正投入到其中。学术上的学习是一回事,但投入使用这些知识是一个完全不同的怪物。我认为,如果一个人已经掌握了C++语言,新的概念不会带来太多的负担,但是一个新来的人可能会有一个优势,因为他们不会费心学习一些更过时的做事方法。
发布于 2009-05-07 12:55:26
1)语言本身
据我所知,C++'03和C++'0x之间并没有什么重大变化,这里我唯一能想到的是使用auto作为存储类说明符,但是由于它没有语义意义,所以我不认为这是一个问题。
对于这个标准还有许多其他的学术修正是非常必要的,例如,对成员数据的布局有更好的描述。最后,随着多核/cpu体系结构成为常态,必须修复内存模型。
2)语言知识
我个人认为,对于99.9%的C++开发人员来说,更新的语言将更容易使用。我特别想到的功能,如汽车,兰博达和警察。这些特性确实应该使语言的使用更令人愉快。
在更高级的级别上,您有其他功能,如各种模板等,帮助更高级的用户。
但是这里没有什么新的东西,我仍然对每天有这么多的C++开发人员没有使用(甚至听说) STL感到惊讶。
从个人角度来看,在新标准中,我唯一关心的是概念的特性。由于这是一个如此大的变化,同样的问题发生在模板(即。(完全崩溃的实现)是一个真正的危险。
更新FDIS出站投票:
碰巧的是,“概念”在C++ 0x中被删除,而C++ 1x将再次被使用。最后,除了auto之外,还有一些可能会破坏您的代码的更改,但在实践中它们可能会非常罕见。关键的区别可以在外国直接投资(pdf)的附录C.2中找到。
发布于 2009-05-07 15:19:52
对我来说,最重要的是:
unique_ptr + std::move() !
想象一下:
- no reference counting operations
- no additional storage for reference counter variable
这给了你什么?异常安全,便宜(指针..)集装箱,没有任何费用,。容器将能够只使用memcpy() unique_ptrs,因此不会因为智能指针包装常规指针而导致性能损失!所以,再一次:
:)
另一种观点是:
这就像放松RAII的概念(因为使用指针),而不失去RAII的好处。另一个方面:封装在unique_ptr()中的指针将在许多方面运行,类似于java引用对象变量。不同的是,unique_ptr()一次只能存在于一个作用域中。
https://stackoverflow.com/questions/834383
复制相似问题