Python vue组件 PyCharm Angular k8s overflow 动态条形图 Gradle grails charts cmd Fries react脚手架 郑州网络 jq获取元素 coreldraw学习 hadoop环境变量配置 kubernetes视频教程 mysql建表 python中get函数 python正则表达式例子 python获取字典的值 python搭建网站 python安装模块 搭建java环境 java基础学习 java初级教程 java平台 java中tostring方法 java怎么配置环境变量 jdk环境配置 java中的泛型 customerrors windows7loader 球中的小鬼 stata软件 微信超级好友 碧桂园园宝 ps蒙版抠图详细教程 大势至usb监控
当前位置: 首页 > 学习教程  > 编程语言

学C++有多难,你知道吗?

2020/10/8 19:54:24 文章标签:

都2020年了,还要学C吗?C好多理工科大学里面都有,它的学习难度比其他编程语言比如Python, Javascript, 和Java等等难。那为什么呢? C难的原因有三个基本点: 提供抽象的同时也贴近硬件模型 Zero-overhead的抽象 兼容…

都2020年了,还要学C++吗?C++好多理工科大学里面都有,它的学习难度比其他编程语言比如Python, Javascript, 和Java等等难。那为什么呢?

C++难的原因有三个基本点:

提供抽象的同时也贴近硬件模型

Zero-overhead的抽象

兼容C

详细展开

例子一

请问下面的代码能正确编译链接吗?

//book.cpp class Book { public: static int Count; Book() = default; ~Book() = default; } int main() { Book::Count += 1; }

答案是不能!class Book后面右花括号要有分号! 哪里?如果你写过Java,你会更吃惊!按我们的书写习惯,Book的右花括号已经可以表明类结束了。但是为了兼容C,分号必须要有。为什么呢?因为C里面可以书写下面的代码

struct Book { } book;

这样子定义了一个名为book的Book变量。所以C++也需要在定义类的结尾时候书写分号。这个分号我无数次忘记,幸好现在的IDE比较智能,都会提示出来。

把分号添加了以后,我们能成功编译吗?不能,因为不能成功连接。如果用下面的命令编译

g++ -std=c++11 book.cpp -o book error是 Undefined symbols for architecture x86_64: "Book::Count", referenced from: _main in book-b5397d.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

!!??这又是为什么?那是因为 Count只是被声明了,而没有定义。在Java里面这个代码完全没有问题!我第一次写的时候,也吃惊(我之前写过Java。)最后是万能的Google帮忙解决了。这是因为C++区分声明和定义:声明是为了引入一个名字,定义是将名字赋予实体。

那如果我们直接初始化count为2呢?还是不行,得到的错误是

book.cpp:4:14: error: non-const static data member must be initialized out of line static int Count = 2; ^ ~ 1 error generated.

错误提示我们要对count进行定义并且"out of line"。 啥叫out of line?比如在int main()全面初始化

//book.cpp class Book { public: static int Count; Book() = default; ~Book() = default; }; int Book::Count = 2; int main() { Book::Count += 1; }

这么简单的代码,我们经过了这么多次修正才正确编译!直到现在,C++17终于意识到,我们也需要像Java那样简简单单在类中定义一个静态变量,引入了inline static variable。所以如果我们使用C++17,那么上面的代码可以写成

//book.cpp class Book { public: inline static int Count = 2; Book() = default; ~Book() = default; }; int main() { Book::Count += 1; }

例子二

下面的代码有什么错误?

//把Book 类拷贝到这里

class MyBook:public Book { public: void print() { std::cout<<"my book\n";} } int main() { Book book = new MyBook(); }

例子三

遇到下面的问题,怎么入手

: undefined reference to symbol ‘AtlComPtrAssign’ libmylib.so: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status

例子四

程序crash了怎么看core dump?

例子五

三五构造器记得怎么写吗?

例子六

Segment Fault 是什么?

……

C++太难了!光靠自己是没办法学明白的。因为学习从来不是一个人的事情,要有个相互交流与监督的伙伴一起学习,才会享受其中的快乐哦!C/C++零基础编程学习,从现在开始!

“点击链接”加入


本文链接: http://www.dtmao.cc/news_show_250178.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?