当前位置:  开发笔记 > 编程语言 > 正文

现代C++变得更加普遍吗?

如何解决《现代C++变得更加普遍吗?》经验,为你挑选了10个好方法。

当我6-7年前第一次学习C++时,我学到的基本上是"C with Classes".std::vector绝对是一个高级话题,如果你真的想要,你可以学到一些东西.当然没有人告诉我可以利用析构函数来帮助管理记忆.今天,我看到的每个地方都看到RAII和SFINAE,STL和Boost以及现代C++.即使是刚刚开始使用该语言的人,也几乎从第1天开始就教授这些概念.

我的问题是,这只是因为我只看到"最好的",即SO上的问题,以及其他倾向于吸引初学者(gamedev.net)的编程网站,或者这实际上代表了C++社区作为一个整体?

现代C++真的成为默认的吗?专家们写的不是一些奇特的东西,而是变成"C++的方式"吗?或者我只是无法看到仍然学习"C with classes"并编写自己的动态数组而不是使用的数千人std::vector,并通过从他们的顶级代码手动调用new/delete来进行内存管理?

尽管我想要相信它,但如果整个C++社区在几年内发展得如此之多,那似乎令人难以置信.您的经历和印象是什么?

(免责声明:不熟悉C++的人可能会错误地解释标题,因为询问C++是否比其他语言更受欢迎.这不是我的问题."现代C++"是C++中方言或编程风格的通用名称,以该书命名" 现代C++设计:通用编程和设计模式应用 ",我只对这与"旧C++"感兴趣.所以不需要告诉我C++的时间已经过去,我们都应该使用Python;))



1> JohnMcG..:

这就是我认为事情发展的方式.

第一代C++程序员是C程序员,实际上他们使用C++作为C语言.此外,STL还没有到位,所以C++本质上就是这样.

当STL出现时,那些先进的东西,但大多数人写书,拼凑课程和教学课程首先学习C,然后是C++的额外东西,所以第二代从这个角度学习.正如另一个答案所指出的那样,如果你习惯于定期编写循环,那么改变使用std::for_each并不会给你带来太大的好处,除了你以"现代"方式做事情的温暖模糊感.

现在,我们有使用整个C++的教师和书籍编写者,并从这个角度获得他们的指示,例如Koenig&Moo的Accelerated C++和Stroustrup的新教科书.所以我们char*当时不学习std::strings.

这是一个有趣的教训,即"遗留"方法需要多长时间才能被替换,特别是当它们具有有效性的记录时.


是.由于C编码器的巨大安装基础,使C++高度向后兼容C非常聪明.非常类似于MS始终保持与DOS的向后兼容性的成功策略.(请参阅Raymond Chen的优秀博客,了解他们常常痛苦的篇幅......)
哎呀,在那里进行了一些切线......我想我觉得你对那些从C(但保留了C风格的思维)和那些"第一口味"的人之间的"代际分歧"是对的. "是后STL C++.

2> Ray Hidayat..:

绝对没错.对我来说,如果你没有像你所说的那样用"现代C++"风格编写C++,那么使用C++就没有意义了!您可能只是使用C."现代C++"应该是我认为C++编程的唯一方式,我希望每个使用C++并以这种"现代"方式编程的人都会同意我的看法.事实上,当我听说一个不知道诸如auto_ptr或ptr_vector之类的事情的C++程序员时,我总是感到非常震惊.就我而言,这些想法是C++的基础和基础,所以我无法用其他方式想象它.


"只是用C?" C非常强大.
@ClarkGaebel好吧,如果C是强大的,那么C++的继承来自C而没有它的问题:)
+1; 我很早就选择了"现代c ++"风格,因为这是自然的方式(如果你不是用C语言思考C).
机器人肯定不会用C++编程,它们不够愚蠢,并且会冻结尝试编译它.
@rxantos,你说我们没有足够的选项来评估性能,例如查看汇编输出,定时器,RAM监视器等等.在这方面,C++与C没有什么不同.如有疑问,请查看.其他任何东西都只是道听途说.
明天的机器人将用C编程,因为今天的开发人员已经厌倦了它.

3> spoulson..:

在Windows 3.1时代,C是标准.当C++进入开发者市场并后来成为ANSI标准时,它就是新的热点.它使用多态性推广了OOP的首字母缩略词和一些基本的设计模式.

现在,随着对C#/ .NET等低障碍进入管理平台的更多接受,使用C++的理由就更少了.很多开发人员都会有一个选择,说实话:C++是一个学习新手的熊.使用C#,您可以使用它.

这真的只留下了需要C++和顽固的C++布道者继续练习艺术的平台.这是一个需要并希望被称为"现代C++"的所有抽象层的社区.

所以是的,我相信"现代C++"正如你所说的那样,正变得越来越流行.尽管如此,它的流行程度与过去使用的不同.


我不知道这是否是更多层次的抽象或更多的顽固性.我怀疑只是通过模板提供的抽象*种类*在Java或C#中不可用,所以喜欢或需要它们的人都使用C++.
所以你说的是越来越普通的开发人员转向C#等等,而更硬核的人更多地使用C++?(并不是没有真正聪明的C#/ .NET人,但有很多不那么聪明.)具有一定的意义.
我认为这是一个有效的观点.当然,对于每个人来说都不是这样,但在很大程度上,我同意,大多数有选择的人已经选择了C#或Java或其他类似的语言.
使用案例:我希望Windows客户端在我的数据库上进行CRUD.使用C#/ .NET或C++/MFC?我想要一个Web应用程序...使用C#/ ASP.NET或C++/ISAPI?我想要一个使用DirectX C#/ .NET或C++/MFC/WTL的简单"Nybbles"克隆?我想在Assembly09获得一个成功的演示......绝对是C++(与C#相比).

4> jfsantos..:

我是其中一个学习如何使用STL并从第1天开始听到很多有关RAII和优秀C++编程实践的人.看起来像今天学习C++的一些最推荐的书籍(如Accelerated C++和Effective C++ series) )专注于使用STL工具而不是卷起你自己的东西,并为有效(或"现代")编程提供了许多"规则".

但与朋友交谈时我也注意到一些公司仍在使用"C with Classes",而不是"Modern C++".也许有一天,"现代C++"的作者和用户提出的文化将占上风.



5> Binary Worri..:

我认为你刚开始时遇到了糟糕的经历.

你需要自己获得Scott Meyers有效的C++书籍.我在1999年愤怒地开始使用C++,在我被允许检查任何代码之前,我的团队负责人让我坐下来阅读Effective C++和More Effective C++.

他的大部分建议都是"不要使用此功能,但如果必须,请记住一点"

如果你遵循他的建议,你会写好或"现代"的C++.

他现在也有一本关于STL的书,但我还没读过.



6> David Thornl..:

在我的C++工作中,我发现越来越多地使用现代功能,更多人在电话放映和采访中向我询问了这些功能.据我所知,他们正在追赶.

我最初学习的C++就像C with Classes; 尽管语言的发展远远超过了这一点,但我读过的书和我合作过的人都坚持"老C++".RAII人们会想到的东西,而不是自动做的事情,我记得读过一些关于异常安全问题的早期文章.

正如所指出的那样,现在有了新书.许多旧的仍然相关,但他们似乎越来越多地解释为什么显然坏的想法是坏的.(同样地,现代读者很难理解弗洛伊德对无意识思维的革命是什么,因为它现在是传统智慧.)

Stroustrup刚出版了一本教科书,编程:原理与实践使用C++.我买它是因为我还没有从Stroustrup的书中学到好东西,但还没有超过前几章.到目前为止,我只能说我赞同他开始的方式,至少是对如何使用C++的一个很好的介绍.


那时,没有人真正知道如何编写异常安全的代码.这是在标准出版后的几年中制定的.我记得C++ Report中的一些文章.

7> Pavel Minaev..:

在我目前参与的项目工作中,有很多C++代码在相当长的一段时间内发展(现在超过10年).您所说的演变在那里清晰可见:旧代码通常是"C with classes" - 原始指针,char*字符串和相关C函数的使用,数组等; 较新的代码使用ATL智能指针等来管理资源,但大多数时候仍然坚持使用手动编码循环,并且迭代器很少见; 最新的一个是充满了STL容器,算法shared_ptr(包括管理句柄的自定义删除器等),非常通用的函数和类模板等等.目前,大多数传统的"C with classes"编码技术,例如带有手动生命周期管理的原始未封装指针,在代码审查中非常不受欢迎.由此判断,您的观察结果似乎是准确的.

最近的开发似乎是C++ 0x lambdas的一个时尚 - 它有一个积极的一面,它也倾向于平衡,有利于在手动编码循环上使用标准算法,因为现在你可以让你的所有代码内联算法也是如此.



8> Johan Kotlin..:

我不会说std :: vector这些天有资格成为"现代".这是非常基本的.

一般来说,我的印象是人们已经获得了一些现代C++风格的经验,并且稍微清醒了一下.举一个简单的例子,STL for_each很有意思,但实际上它并没有在普通的C循环上增加太多的价值.它更难调试,有时无法提供最佳性能.此外,当前STL中用于函数编程的构造通常非常麻烦,特别是如果您从像ML这样的真实函数语言获得经验的话.


矢量是基本的正是关键.它并不总是基本的.曾经,它通常被视为超级复杂(它使用TEMPLATES)和低效(它不是原始数组)的东西.专家可能会传讲的东西,但许多人只是不相信.
但我认为这是因为一些人尝试使用for_each和朋友基本上用于所有事情,即使是像简单的for-loop更简洁的东西 - 膨胀2行循环最多10行.我期待更多的人使用for_each和朋友,而lambda将在C++ 1x中可用
也许是因为std :: for_each很少是你所需要的......比如std :: transform?使用算法可以帮助您摆脱一个非常常见的错误:不正确的循环条件.

9> Diego Sevill..:

不幸的是,根据我的经验(西班牙大学),规范是不要自己考虑语言.他们使用最简单的语言来教授编程(即Java),因为它应该对教师和学生来说很容易,然后他们将C用于OS类等.

C++的引入非常轻微(无论如何在任何课程中),只是为C提供类.他们没有进入提升甚至STL.我认为跟上C++的所有特征和思维方式对教师和学生来说都是昂贵的.这里有多少C++程序员了解所有Boost库,以便使用它们来提供更好的解决方案或设计它?人们必须有兴趣跟上所有新的图书馆和习语.

然而,正如我所说的那样,一般的编程(特别是编程语言)似乎并没有被认真对待,因为它们在开始工作时似乎是一个时间分配,然后忘记了如何编程,因为它们在企业树.这里的许多企业和大学本身都认为编程可以由任何人完成.

如果你遵循这一理念,那么对于我认识的大多数人来说,C++将始终是"C with classes".

问候,



10> Nemanja Trif..:

根据我的经验,它在很大程度上取决于软件产品/项目的年龄.我所知道的大多数新项目都使用现代C++(RAII,STL,Boost).但是,有许多C++项目已经超过10年了,你没有看到现代C++.

另外,请记住,一些最流行的STL实现在5年前就已经破坏了(MSVC <7.0和GNU <3.00)

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有