C++之父2024年末重磅演讲重新认识C++:跨世纪的现代演进算法代码编程编译器c++现代汽车include

12月5日,美国国家工程院、ACM、IEEE院士、C++之父BjarneStroustrup在「」上发表了题为《重新认识C++:跨世纪的现代演进》的演讲。屏幕上,演示文稿的第一页就令人印象深刻:“C++几乎可以实现我们所期望的一切!”

从构建操作系统到开发高性能游戏引擎,从支持人工智能框架到驱动航天器控制系统,C++一直是系统级软件开发的首选语言。然而,这位编程语言大师并不是在炫耀C++的强大,而是要指出一个关键问题:“正因为它如此强大,我们更要谨慎选择正确的使用方式。就像goto语句——它无所不能,所以我们几乎从来不用它。同样的,虽然用20世纪80年代的方式写C++也能完成任务,但这显然不是最佳选择。我们需要明确自己的真正需求,避免重蹈覆辙。”

Stroustrup指出了一个常见的认知误区:人们往往把“熟悉”等同于“简单”。对很多开发者来说,见过千百遍的代码写法看起来简单,而新的特性和方法则显得复杂。

“我们必须努力避免这种思维定式,否则就会永远停留在20世纪。”他强调道,“今天,我想谈谈我所认为的当代C++、现代C++的基础是什么。我认为,当代的编程方式能让代码变得更简单、更安全、更高效,远胜于任何旧版本的C++。(在这一语境下,“当代”往往指的是C++20/23/26等当前的版本)”

欢迎回顾:

当代C++的简洁之美为了说明当代C++的优势,Stroustrup首先以他收到的一个来自《龙书》(DragonBook,编译器设计领域的经典教材)作者、AWK语言的创造者之一AlfredV.Aho的难题为例。这个例子展示了如何用C++简洁地处理文本中的不重复行:

importstd;usingnamespacestd;intmain()//输出输入流中的不重复行{unordered_mapm;//哈希表for(stringline;getline(cin,line);)if(m[line]++==0)cout<

“这段代码展示了几个重要特点,”Stroustrup解释道,“首先,完全没有使用预处理器;其次,代码高效且容易理解;第三,如果需要进一步优化,也完全可以做到——但关键是,在开始优化之前,这段代码本身就已经相当高效了。”

“让我们试试另一种处理不重复行的方式。”他进一步提出,“为什么要一直输出行呢?也许我想要的是一个仅仅收集输入中不重复行的程序。”

这样一个简单函数就能轻松实现:

vectorcollect_lines(istream&is)//从输入中获取不重复行{unordered_setm;//哈希表for(stringline;getline(is,line);)m.insert(line);returnvector(m.begin(),m.end());}autolines=collect_lines(cin);

“C++的类型系统会自动推导出我们需要的是string的vector,”Stroustrup解释说,“而且返回时不需要复制,直接移动就行了。这样的实现既简洁又高效。”

“但这里的vector构造有点啰嗦。我希望vector能直接接受这个集合本身,”Stroustrup说,“所以我写了一个函数,它可以接受任何范围并从中创建vector。”于是他展示了一个更简洁的版本:

vectorcollect_lines(istream&is)//从输入中获取不重复行{unordered_setm;//哈希表for(stringline;getline(is,line);)m.insert(line);returnmake_vector(m);}autolines=collect_lines(cin);

“标准库不需要提供所有功能。有时候自己写个简单函数就能解决问题,比如这个make_vector。”他最终总结道,“也许在C++的未来版本中,vector会直接支持这种构造方式,那时这个函数就不需要了。”

“从这些例子可以看出我最重视的一点:思想的直接表达。”Stroustrup紧接着列出了他重视的每一项事物:

谈到C++的发展历程,Stroustrup指出:“一些关键特性和技术已有多年历史,比如带构造函数和析构函数的类、异常处理机制、模板、std::vector……等等。另一些则是较新的发展,如constexpr函数和consteval函数、lambda表达式、模块、概念、std::shared_ptr……等等。关键在于将这些特性作为一个整体来运用。”

资源管理:C++的基石

“我们知道,相比归还东西,人们更倾向于获取东西,”Stroustrup首先打了个生动的比方,“问任何一个图书管理员就知道了,人们借书后常常忘记还书。在大型软件中,如果我们必须显式地返还借用的资源,我们肯定会遗漏一些。”

Stroustrup将资源定义为“任何必须获取并在之后释放(归还)的对象”。“这包括内存、string(字符串)、互斥锁、文件句柄、套接字、线程句柄、着色器等等很多东西,”他解释道。“从这个词的含义来看,在编程中我们要处理的很多东西都是资源。”

在C++中,每个资源(resource)都应该有对应的句柄(handle)来管理它的生存期。句柄负责资源的访问和释放,这种机制是通过对生存期的严格控制来实现的。

为了解决这个问题,Stroustrup提出了几个关键原则:

1.避免手动释放资源——不要在应用程序代码中出现free()、delete等资源释放操作;

2.使用资源句柄——每个对象都由负责访问和释放的句柄管理;

3.基于作用域管理——所有资源句柄都属于特定作用域,可以在作用域间转移;

他用一段简单但富有启发性的代码来说明这些原则:

templateclassVector{//T类型元素的vectorpublic:Vector(initializer_list);//构造函数:分配内存并初始化元素~Vector();//析构函数:销毁元素并释放内存//...private:T*elem;//指向元素的指针intsz;//元素数量};voidfct(){Vectorconstants{1,1.618,3.14,2.99e8};Vectordesigners{"Strachey","Richards","Ritchie"};//...Vectorstring,jthread>>vp{{"producer",prod},{"consumer",cons}};}

“这就是C++的基石:构造函数(constructor)和析构函数(destructor),”Stroustrup说道,“如果需要获取任何资源,那是构造函数的工作;如果需要归还资源,那是析构函数的工作。这里我们将抽象层次从机器级的指针和大小提升到了更高的层次。我们把它包装成一个类型,这个类型行为正确,有赋值操作,有访问函数,并且能正确清理。”

他特别指出了资源管理机制的递归性:“string拥有一些字符,这里的pair拥有一个string和一个jthread。jthread拥有对操作系统线程的引用。这些都是递归进行的。神奇之处在于最后的闭合花括号——那里是所有东西都被隐式而可靠地清理的地方。”

为了做好资源管理,Stroustrup强调了对生存期的控制:

“这些机制让我们能够开发出更安全、更可靠的代码,”他总结道,“因为资源管理不再依赖于程序员的记忆力,而是由语言机制自动保证。”

错误处理的策略

“在确保资源安全的基础上,我们还需要有明确的错误处理(errorhandling)策略,”Stroustrup随即转入了另一个重要话题。他指出,C++中有两种主要的错误处理方式,它们各有适用场景:

“对于那些常见且可在局部处理的失败情况,使用错误码(errorcode)是合适的,这种方式避免了使用效率低下且丑陋的try-catch结构。”他解释了第一种情况,“但问题是,我们经常忘记检查错误码,这可能导致错误的结果继续传播。而且,这种方式不适用于构造函数和运算符。比如说,当你写Matrixx=y+z这样的表达式时,就没有地方放置错误返回语句和测试。”

“另一方面,对于那些罕见且无法在局部处理的错误,异常处理(exceptionhandling)是更好的选择。”Stroustrup继续说道,“错误可以沿调用链向上传播,避免陷入‘错误码地狱’。未捕获的异常会导致程序终止,而不是产生错误结果。重要的是,这种机制必须与RAII(资源获取即初始化)配合使用,依赖作用域资源句柄。”

他用一个具体的例子说明了这个观点:

voidfct(jthread&prod,stringname){ifstreamin{name};if(!in){/*...*/}//预期可能发生错误vectorconstants{1,1.618,3.14,2.99e8};//内存可能耗尽vectordesigners{"Strachey","Richards","Ritchie"};//嵌套构造jthreadcons{receiver};pairpipeline[]{{"producer",prod},{"consumer",cons}};//...}

“想象一下,如果只使用单一的错误处理方式,这段代码会变得多么复杂,”Stroustrup说,“每个操作都可能失败:文件打开可能失败,内存分配可能失败,构造过程可能失败。使用异常处理,我们可以集中处理这些错误,而不是在每个可能的失败点都编写检查代码。”

Stroustrup还提到了一个最新的研究发现:“即便对小型系统,异常处理也可能比错误码更高效。我们最近看到一个很好的演示,展示了在小型固件中使用C++异常可以产生更小、更快的代码。”

“关键是要记住,”他强调,“错误处理不是要选择唯一正确的方式,而是要根据具体情况选择最合适的方式。有时是错误码,有时是异常,重要的是要有一个明确的策略。即便对小型系统,异常处理机制也可能比错误码更高效。KhalilEstell最近在CppCon2024上的演示*展示了在小型固件中使用C++异常可以产生更小、更快的代码。”

模块:打破“包含”的魔咒

谈到代码组织,Stroustrup首先指出了一个困扰C++开发者多年的问题:“头文件包含的顺序依赖问题一直是个麻烦。#include"a.h"后跟#include"b.h",可能与顺序颠倒后的结果完全不同。这种基于文本的包含机制会导致:包含具有传递性、相同的代码被重复编译多次、容易引发宏定义冲突等问题。”

相比之下,C++20引入的模块(modules)机制则完全不同:

importa;importb;

“这与顺序无关,”Stroustrup解释道,“写成下面这样,效果完全一样。”

importb;importa;

“import不具有传递性,模块化的代码更加干净,而且能显著提升编译速度——这不是百分比级的提升,而是数量级的提升。”

紧接着,他兴奋地宣布:“经过几十年,我们终于在C++中实现了模块。我们不必再使用include了!这是我长期计划的一部分——逐步淘汰C预处理器。预处理器会给工具带来麻烦,因为工具看到的和程序员看到的是不一样的。”

“当然,你不能期待在所有情况下都能获得25倍的提升,”Stroustrup说,“但根据经验,使用具名模块通常能让编译速度提高7-10倍。这就是促使人们将代码从旧风格改造为新风格的动力。虽然这个过程并不容易——毕竟我们有数十亿行现存的代码——但这种改进确实显著。”

在标准库方面,C++23已经提供了模块化支持。最重要的是模块std,它包含了完整的std命名空间:

importstd;//包含整个标准库

他特别推荐观看DanielleEckert在2022年CppCon上题为《ContemporaryC++inAction》的演讲,“这个演讲展示了现代C++特性在实际项目中的应用,非常精彩。如果可能,你一定要去看一下这个视频。”

“模块化的概念早在1994年的《C++语言的设计和演化》中就已提出,”Stroustrup补充道,“现在我们终于实现了!这个特性不仅让代码更清晰,也大大提升了开发效率。”

泛型编程与概念

“泛型编程(genericprogramming)是当代C++的关键基础,”Stroustrup如此介绍道,“这个想法最早可以追溯到80年代初。那时我就描述过这个概念,只是当时我以为可以用宏来实现——关于这点我错了,但对需要泛型编程这一点我是对的。现代C++中的大量泛型编程思想都来自AlexStepanov。”

泛型编程为C++带来了多方面的优势:代码更加简洁、思想表达更直观、实现零开销抽象、保证类型安全。它在标准库中无处不在:容器和算法、并发、内存管理、I/O、string和正则表达式等。

Stroustrup用一个简单的例子说明了基于概念的泛型编程:

voidsort(Sortable_rangeauto&r);vectorvs;//...填充vs...sort(vs);arrayai;//...填充ai...sort(ai);listlsti;//...填充lsti...sort(lsti);//编译错误:list不支持随机访问

“这段代码展示了几个隐含的要求,”他解释道,“容器的类型、元素的类型、元素的数量、比较准则等。概念(concept)的作用就是明确指定对类型r的要求。当编译器看到vector时,它会问:‘这个vector有支持随机访问的元素序列吗?’是的,有。‘这些元素是可以比较的吗?’是的。所以代码可以工作。但对于list,因为它不支持随机访问,编译器会立即发现这个错误。”

Stroustrup特别指出,“概念不等同于‘类型的类型’。概念是可以作用于多个类型的谓词。有些概念还可以接受值参数,可以混合类型和值。但概念本质上是函数,而不是像其他语言中那样仅仅是函数签名的集合。”

随后,他进一步解释了为什么list不支持随机访问是一个特意的设计:“如果在一个包含50万个元素的list中使用下标访问,会非常非常慢。所以这种限制实际上是在保护开发者避免写出性能糟糕的代码。”

更复杂的情况是,许多算法都需要多个模板参数类型,而且这些类型之间往往需要建立某种关系。Stroustrup展示了一个来自标准库的例子:

templateindirect_unary_predicatePred>Iterator_tranges::find_if(R&&r,Predp);vectornumbers;//存储数字的string,如"13"和"123.45"//...填充numbers...autoq=find_if(numbers,[](conststring&s){returnstoi(s)<42;});//lambda表达式

“这里的概念实际上是编译期谓词(compile-timepredicate),它们在编译期执行并返回布尔值。通常一个概念会基于其他概念构建,形成一个完整的类型约束体系。”

Stroustrup表示,概念并不是什么新鲜事物:“每个成功的泛型库都包含某种形式的概念。它们存在于设计者的构思中,记录于技术文档中,体现在代码注释中。比如C/C++的内置类型概念(算术类型和浮点类型)、STL中的迭代器、序列和容器概念、数学概念(单子、群、环、域)、图论概念(边、顶点、图、有向无环图等)……”

讲到此处,Stroustrup致敬了C语言之父丹尼斯·里奇(DennisRitchie,1941-2011):

“使用概念还带来了许多实际好处:支持更好的程序设计,提升代码可读性和可维护性,避免过度使用无约束的auto和typename,大幅改进错误信息。”他打了个比方:“还记得那个只有内置类型没有类(class)的年代吗?C++从未有过这种时期,但现在的C语言仍是这样。好在C现在也有了函数原型。”

“概念的引入还极大地简化了条件约束的表达。”Stroustrup展示了一个例子:

templateclassPtr{//...T*operator->()requiresis_class;//仅当T是类时才提供->运算符};templateclassPair{//...templateTT,convertibleUU>Pair(constTT&,constUU&);//只为可转换为成员的类型提供构造函数};

“传统的enable_if方案原始、丑陋、非通用,且容易出错,”他最终评价道,“而使用概念,我们可以用更简洁、更直观的方式表达这些约束。”

协程:状态保持!

“说到协程(coroutine),这其实是个有趣的故事,”Stroustrup回忆道,“在C++发展的最初十年,协程是我们的一个重要优势。但后来一些公司因为它不适合他们的机器架构而反对,结果我们失去了这个特性。现在,我们终于把它找回来了。”

协程的特点是能在多次调用之间保持其状态。Stroustrup用一个生成斐波那契数列的例子来说明:

generatorfibonacci()//生成0,1,1,2,3,5,8,13...{inta=0;//初始值intb=1;while(true){intnext=a+b;co_yielda;//返回当前斐波那契数a=b;//更新状态b=next;}}for(autov:fibonacci())cout<

“这里的妙处在于状态的保持,”他解释道,“我们有计算的状态——a、b和next——它就这样不断地计算下一个斐波那契数。协程已经被嵌入到迭代器系统中,所以我们可以用简单的for循环来获取数列中的值。”

但这个例子还有一个小问题:“这是个无限序列,显然会带来问题,我们会遇到溢出。那么如何限制它只生成特定数量的值呢?”Stroustrup展示了改进的版本:

templategeneratorfibonacci()//生成前N个斐波那契数{inta=0;intb=1;intcount=0;while(count())//只生成十个数:0,1,1,2,3,5,8,13,21,34cout<

“虽然标准库对协程的支持还不如我想要的那么完善,”Stroustrup说,“但这个例子中使用的generator已经在C++23中可用了。如果你使用的是较早的编译器,还可以使用Facebook的coro库或其他任务库。这个例子很好地展示了模板和协程是如何和谐地协同工作的。”

“协程为我们提供了一种漂亮的方式来处理需要保持状态的计算,”他总结道。“它让代码更容易理解,也更容易维护。这正是我们一直追求的目标:简单的事情简单做。”

调优:“洋葱原则”

“对某些代码来说,调优是必要的,”Stroustrup转入了性能优化的话题。“但我们都听过‘避免过早优化’这个建议。重要的是要在优化前后都进行性能测量,同时在设计接口时就要考虑优化空间。”

他提出了几个关键原则:

1.接口设计需明确定义

2.保持类型信息的完整性

3.提供足够信息支持检查和优化

4.管理复杂度:"简单的事情简单做!"

“我把这个叫做‘洋葱原则’,”Stroustrup打了个生动的比方,“你可以把代码想象成洋葱的层。每当我们需要优化或处理特殊情况,我们就可能需要剥掉一层抽象。但要记住,每剥掉一层,你就会哭得更厉害。”

“为什么会这样?”他继续解释道,“因为每深入一层,你就有可能遇到更多的错误,必须写更多的代码,代码也更难理解。所以在真正需要之前,不要轻易剥掉一层抽象。这就是我对‘不要过早优化’的理解。”

此外,关于并发(concurrency),Stroustrup指出这是一个需要单独讨论的重要话题。“你需要它来提高效率。在标准库中有广泛的、相当低层的并发支持:线程和锁、共享机制、并行算法、协作取消、Future机制、协程等等。这些都是为了性能,但同时也带来了复杂性。”

指南和规格配置:走向未来

“不要停留在20世纪,”演讲走进尾声时,Stroustrup直截了当地说,“但这说起来容易做起来难。大多数代码都包含一些旧的部分,升级这些代码既困难又耗时。虽然升级能带来巨大好处——比如引入模块能显著提升编译速度——但要摒弃次优技术确实很难,因为我们不仅要面对海量的历史代码,还要克服根深蒂固的编程习惯。”

“我们面临一个根本性的问题,我们不能改变语言本身——稳定性和兼容性是C++的核心优势。但我们可以改变使用语言的方式。”

“正是基于这种现实,”他继续说,“我们采取了一种务实的策略:通过一套灵活的指南规则体系来简化语言的使用,而不是改变语言本身。这些指南可以根据项目需求选择性采纳。比如C++CoreGuidelines就是一个很好的例子,而且已经有了实践工具的支持,如VisualStudio、GCC和Clang-Tidy都能帮助执行这些指南——这不是科幻小说,这些工具现在就可以使用。”

在标准委员会中,Stroustrup和同事们正在推进一个更进一步的方案:规格配置(profile)。“每个规格配置是一套强制性的指南规则,”他解释道,“虽然现在还在制定中,但其目标很明确:让开发者能够根据需要选择不同类型的安全性级别和执行强度。这将帮助我们在保持语言强大的同时,使其更容易正确使用。”

Stroustrup建议的初始规格配置包括:

1.算法:全面的范围检查,禁止解引用end()迭代器;

2.算术:检测上溢和下溢;

3.类型转换:全部禁用;

4.并发:消除死锁和数据竞争(这是个难点);

5.初始化:所有对象必须初始化;

6.失效:禁止通过已失效的指针访问(包括悬空指针);

7.指针:禁止对内置指针使用下标操作(应使用span、vector、string等);

8.范围:捕获范围错误;

9.RAII:所有资源必须由句柄管理;

10.类型:涵盖初始化、范围、转换、失效和指针规则;

11.联合体:禁止使用union(应使用variant等);

他说:“我们需要那些底层的、复杂的、接近硬件的、容易出错的、专家级的特性,因为它们是高效实现高层功能的基础。很多底层特性在正确使用时都很有价值。但一旦我们有了这些基础,就可以在此之上建立更安全、更简单的编程模型。”

“我们想要的是「增强版C++」——简单、安全、灵活、高效,而不是功能受限的子集。我们不能失去C++最重要的特性:高性能和对硬件的直接控制。而且这些改进不会改变语言的本质,最终的代码仍然是符合ISOC++标准的。”

Stroustrup还总结了C++的编程模型:

在演讲的最后,Stroustrup展示了一张C++用户数量增长的图表。

“C++在设计之初就考虑到语言会不断演进,”他说,“从1979年的CwithClasses,到1998年引入异常、模板和命名空间,再到2011年增加并发、lambda表达式和智能指针,直到2020年带来概念、协程、模块等特性,C++一直在成长。”

扫描文末二维码,即可预约参与直播并领取白皮书。让我们一起探索现代C++的技术深度,把握编程语言演进的前沿方向。

THE END
1.c++在线开发编译idec++在线工具(GNU)CoffeeScript,,,CommentatorCommercialConditConvexCoodCOWC++ (gcc)cQuentsCrayonCrystalC# (.NET Core)C# (Mono)CubicallyCubixCyDDashdcDeadfish~Standard 免费AI编程助手 AI无损放大 代码小浣熊 有言AI 在线PS 输入运行代码 1 2 3 4 5 6 7 #include<iostream> usingnamespacestd;https://www.w3cschool.cn/tryrun/runcode?lang=cpp
2.C++:常规用途语言和库MicrosoftLearn无论你是更新旧式代码还是为新平台(如手机)编写全新、高效、高性能的代码,并希望利用 C++,此处提供的轻松方法都可让你从头开始学习 C++ 基础知识。 你将了解 C++ 语言的基础知识、如何高效地使用该语言及其标准库,以及如何使用用于开发 C++ 的 Visual Studio 环境,包括调试、探索代码和理解错误消息。 这是在 C++ https://docs.microsoft.com/zh-cn/shows/cplusplus-language-library/index/
3.国内不容错过的十大线上C++编程培训机构实力排名表7、编程猫 8、北大青鸟 9、国王的艺术 10、小码王在线(排名来源于网络,不分先后) 国内不容错过的十大线上C++编程培训机构实力排名表中,机构都比较正规,大家可以根据需要选择。如果你不知道怎么选择,小编根据家长孩子真实反馈给大家推荐小码王,多年全国连锁大机构,实力保障,课程好,效果好。 https://www.sok100.com/newsdetail/115679.html
4.新课程新形式青少宫线上编程课,让孩子足不出户学编程编程是什么?市面上分哪几类课程? 专业一点讲,编程是一个人类与计算机独立交互的一种方式,打个通俗一点小朋友也听得懂的比方,编程就是跟计算机说话,让计算机可以听懂你的“指挥”,去做你想让它做的“事情”。 编程课程大致可分为三类课程语言:分别为scratch图形化编程、python人工智能编程、c++信息学编程 https://static.nfapp.southcn.com/content/202403/08/c8671185.html
5.西安c++培训班一般学费多少想要在西安学习c++建议大家考虑火星时代教育,火星时代有独特的教学优势,线上线下一体所有线上课程均是汲取线下多所实体班、数万名学员培训经验,经过多年打磨,被证明是科学、成功的课程,现在咨询火星时代官网老师可免费报名试听。 一、西安c++培训班一般学费多少 https://www.hxsd.com/content/30547/
6.周口市十一国庆节面向游客推出多项文旅活动活动内容:为大力弘扬中华优秀传统文化,进一步丰富我县人民群众的精神文化生活,10月7日鹿邑县文化馆特邀请太极拳省级一级教练赵凤莲进行线上展演,让广大群众足不出户就能感受太极拳的恬淡,从容,松柔,开阔,活动形式线上。 7、《C++语言编程—足球场》线上教学 https://hct.henan.gov.cn/2022/09-30/2616491.html
7.计算与软件工程作业四2w1010本次的作业是在我和舍友的合作下共同完成,两人进行结对编程,最后是通过C++语言实现对红楼梦和水浒传简单的按章节的人物统计。中间经历了前期准备、线上结对编程以及后期完善,并将代码托管到了gitee上。 结对编程的过程 第一次体验结对编程,不可否认的是结对编程的的确能够带来很多独自编程没有的好处,它有助于https://www.cnblogs.com/w1010/p/12616351.html
8.少儿编程C++语言介绍今天我们介绍的是少儿编程体系当中的C++语言。C++语言可以说是最经典的编程语言,基本上大学里面的计算机相关专业,C++语言是必学的一门编程语言。 C++语言是什么? 在中国,“C++”常被称为“C加加”,是一种应用非常广泛的计算机程序设计语言。他从C语言发展而来,保留了C语言原有的所有优点,并添加了面向对象的机制。https://www.youkee.com/ziliao/15061.html
9.c++11多线线程系列c++ 11 多线线程系列---使用c++11 lambda创建线程,C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread()https://blog.51cto.com/u_15133569/5666605
10.C++程序设计(第3版)pdfepubmobitxt电子书下载2024根据教学实践的需要,作者对该书进行了两次修订,现在出版的《C++程序设计(第3版)》,内容更加丰富,讲解更加清晰,学习更加容易,依据ANSIC++标准进行介绍,引导读者从一开始就按C++的要求编程,而不是过多地迁就C语言的习惯。全书分为4篇:基本知识、基于过程的程序设计、基于对象的程序设计和面向对象的程序设计。 本书沿https://windowsfront.com/books/11755539
11.青少年编程魔法课堂C++图形化创意编程对于C++的学习者来说,有没有一款类似Scratch简单易学、编程方式直观、趣味性强的开发工具呢?基于这样的想法,笔者从2016年开始,在Dev-C++ 5.x的基础上,结合OpenGL三维动画引擎等技术改进了Dev-C++智能开发平台。该平台入选了全国教育科学“十三五”规划教育部重点课题“中小学智能实验教学系统的构建与应用实践研究”子课https://labs.epubit.com/bookDetails?id=UB7d58d24e8b528
12.ScratchPythonC++,谁才是少儿编程的第一选择?③ 轻松过渡到更复杂的编程语言一旦孩子们建立了编程的基础知识和信心,他们可以轻松过渡到更复杂的编程语言,如Python和C++。此时,他们已经具备了解决问题的基本能力和编程思维,学习新语言将会变得更加顺利。 2、Scratch到底是什么?Scratch想必很多家长都已经很熟悉了,它最大的特点就是易上手,适合初学者。Scratch起初是https://www.meipian.cn/53ctv11w
13.硬核!C++并发编程(C++11到C++17)腾讯云开发者社区C++与并发编程 前面我们已经了解到,并非所有的语言都提供了多线程的环境。 即便是C++语言,直到C++11标准之前,也是没有多线程支持的。在这种情况下,Linux/Unix平台下的开发者通常会使用POSIX Threads,Windows上的开发者也会有相应的接口。但很明显,这些API都只针对特定的操作系统平台,可移植性较差。如果要同时支持Linuxhttps://cloud.tencent.com/developer/article/1876855
14.C++语言程序设计基础清华大学而C++语言是应用最广泛的面向对象的程序设计语言之一。 本课程是一门面向广大初学者的入门课程,自1999年开始在清华大学开设,本课程的教材已经在清华大学等一百多所学校的不同专业中使用,取得了良好的教学效果。 本课程将C++语言作为大学生的计算机编程入门语言,不仅详细介绍语言本身,而且介绍常用的数据结构和算法、面向https://www.xuetangx.com/courses/TsinghuaX/00740043X/2015_T1/about
15.程序设计基础(用C++语言编程)课后习题解答程序设计基础(用C++语言编程)课后习题解答.pdf 102页VIP内容提供方:微传网络 大小:9.16 MB 字数:约15.63万字 发布时间:2024-03-28发布于河北 浏览人气:117 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)程序设计基础(用C++语言编程)课后习题解答.pdf 关闭预览 想预览https://max.book118.com/html/2024/0324/8043031107006050.shtm
16.厦门趣乐码信息学奥赛Python青少儿编程课程C++ 校区1¥咨询 458人已关注 少儿编程Scratch+Arduino 校区1¥咨询 405人已关注 少儿编程_趣味C++ 校区1¥咨询 463人已关注 少儿编程Scratch 校区1¥咨询 查看更多>> 厦门趣乐码优势更多> 厦门趣乐码是一家专为6~18岁青少儿提供编程培训服务的机构,线上、线下教学相结合,师资力量强大,凭借https://www.baijiao.org/school/xiamenqulema/
17.十大编程软件排行榜编程开发工具大全c语言编程软件有哪些→世界上主流的编程语言有C、Java、Python、C++、C#、Visual Basic、PHP等,针对这些编程语言,又有相对应的Visual C++、Visual Studio、Eclipse、Dev-C++、Notepad++、MyEclipse、JDK、Code::Blocks、Gcc、Sublime Text、IntelliJ IDEA、Ultraedit、C-Free等编程软件,被广泛运用,下面跟随maigoo网编辑一起了解下这些编程工具!https://www.maigoo.com/top/419670.html
18.从零开始的C++网络编程c++网络编程框架? 搭建C/S:用C++搭建一个最简单的,基于socket网络编程的客户端和服务器 ? socket库函数浅析:基于上一节搭建的客户端和服务器的代码介绍相关的库函数 ? 搭建HTTP服务器:基于上一节的介绍和HTTP工作过程将最开始搭建的服务器改为HTTP服务器 ?压力测试入门:优化一下服务器,并使用ab工具对优化前后的服务器https://blog.csdn.net/lingshengxueyuan/article/details/105157295
19.盘点济南地区少儿编程c++课程机构培训十大排名一览2、济南地区乐博乐博:专注于中国3-18岁青少儿编程教育,研发出针对中国儿童的编程教育体系,涵盖人工智能编程、智能机器人编程、信息学奥赛编程等,其在140多所中小学院校开展了编程课程,拥有超230家直营校区+线上教育平台,遍布全国50多个城市。 3、济南地区小码王:专注于中国3-18岁青少儿编程教育,研发出针对中国儿童https://www.bosida.net/news/1398762.html
20.编程利器实用的C/C++语言在线编译器今天主要来安利一款支持C语言、 C++、 Java、Python、Go等多种语言的在线编译器:Lightly IDE(https://lightly.teamcode.com/c)。 以C语言在线编译器为例,大家只需要在浏览器打开就可以开始编程并一键运行: 选择编程语言和版本,让C语言在线编译器自动创建项目文件。 https://www.jianshu.com/p/c0216c71fb4f
21.C++C语言视频教程2017入门游戏编程项目软件开发资源数量:1203,其他_C,C++,【C++_C语言视频教程2017-cocos2dx游戏编程系列】,C丨C++各种开发环境搭建视频工具文档,01-C语言基础,02-C语言提高,03-linux服务器编程&Shell编程,04-linux&shell经典复习,06-第一套-VC++MFC开发,06-第二套-VC++MFC开发知识库视频教程,07-QT开发,0https://www.aigei.com/view/81102-36652610.html
22.C++教程编程入门教程class(类)是 C++ 面向对象设计的基础。使用 class 关键字声明一个类。 9. const const(常量的,constant)所修饰的对象或变量不能被改变,修饰函数时,该函数不能改变在该函数外面声明的变量也不能调用任何非const函数。在函数的声明与定义时都要加上const,放在函数参数列表的最后一个括号后。在 C++ 中,用 const https://www.nowcoder.com/tutorial/10003/4f26dfd7240a44f095f44ef9be963279
23.2020年张家港市线上校园引才招聘专场1、具备机械识图及机械工艺分析能力; 2、具备独立编程能力者优先考虑; 2 机器人焊接工程师 2 焊接/机械专业 大专以上 3000-5000元/月 1、负责确定产品焊接工艺、焊接工装的方案; 2、负责产品焊接工装夹具的设计工作; 编号030:江苏港通电缆有限公司 2020年“同心战疫情?相约张家港”线上校园引才招聘专场 高校毕http://job.kmust.edu.cn/detail/news?id=435762&type_id=5113
24.C++高级编程(第2版)(ScottJ.Kleper)高清中文pdf扫描版486Mc++是当今最流行的高级程序设计语言之一,常用于编写性能卓越的企业级面向对象程序,如游戏或大型商业软件。但一个无法规避的事实是:c++语法纷繁复杂,学习难度较大。如何才能化繁为简,全面系统地快速掌握c++知识呢? c++高级编程(第2版) 将为您提供完美答案。这本权威书籍在大量实例的引导下,解密c++中鲜为人知的特性,https://www.jb51.net/books/166909.html