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

编程知识 行业动态 更新时间:2024-06-13 00:18:47

都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++零基础编程学习,从现在开始!

“点击链接”加入

更多推荐

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

本文发布于:2023-03-27 05:50:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/c52c244ca08aab05ff55872e1eef4951.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:你知道   有多难

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!