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

2023-05-16

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

“点击链接”加入

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学C++有多难,你知道吗? 的相关文章

  • shell if条件分支编程 --- shell脚本编程教程之三

    数学运算 xff1a vim math sh a 61 1 b 61 2 c 61 a 43 2 或者 c 61 a 43 b echo c 条件判断 xff1a 格式1 if 条件 then 条件为真执行的任务 fi 格式2 fi 条件
  • VIM 常用快捷键

    转载 xff1a https www cnblogs com markleaf p 7808817 html 一 移动光标 h j k l 上 xff0c 下 xff0c 左 xff0c 右 ctrl e 移动页面 ctrl f 上翻一页
  • Qt5 对xml文件常用的操作(读写,增删改查)

    微信搜索关注公众号 郑州行疆户外 了解软件工程师的业余户外生活 项目配置 pro文件里面添加QT 43 61 xml include lt QtXml gt xff0c 也可以include lt QDomDocument gt 项目文件
  • Shell分支语句case···esac语法

    Shell编程 xff1a case esac多分支选择编程 也多常用于菜单选择 语法 xff1a case 值 in 模式1 command1 command2 command3 模式2 xff09 command1 command2 c
  • Ubuntu使用iptables配置防火墙提示:unrecognized service(Ubuntu配置iptables防火墙)

    Ubuntu默认安装是没有开启任何防火墙的 当使用service iptables status时发现提示iptables unrecoginzed service 意思是无法识别的服务 以下方法来自http blog csdn net l
  • CMake使用问题汇总

    cmake 指定编译类型 主要用在vs这种支持多配置的集成开发环境中 xff0c 可以在CMakeLists txt中指定 xff0c 也可以在CLI中指定 测试的时候发现在CMakeLists txt定义时不能使用自定义类型 xff0c
  • Shell编程,shift参数操作

    shift参数操作 xff0c 是将参数从左到右逐个移动 比如 xff1a 现在有 1 2 3 4 5 几个参数 shift操作后 xff0c 1被处理过之后 xff0c 2变为 1 3变为 2 4变为 3 5变为 4 就这样依次变动 sh
  • Java入门总览

    Java入门总览 1 JDK的安装 可以去官网下载 xff0c 有各种平台和各种版本的软件 目前常用的 xff0c 网上介绍多的大都是jdk1 8 0 211此版本 Linux系统和Windows系统安装起来都很方便 2 环境变量的配置 配
  • 示例:Linux应用程序遍历当前系统的PCI设备

    使用应用程序遍历设备上的所有PCI设备 xff0c 通过遍历这些设备 xff0c 可以获取到每个设备对应的bus号 xff0c dev号 xff0c func号 xff0c 以及每个PCI设备的额vendorID和deviceID 示例程序
  • 示例:Linux设备属性节点驱动,以及cat, echo操作

    在写Linux字符驱动的时候 xff0c 经常涉及到一些驱动需要在 sys目录或子目录下创建 xff0c 一个属性节点 xff0c 以便与 xff0c 不用查看驱动的版本信息 xff0c 时间等等一些属性信息 xff0c 以判断驱动程序加载
  • 一个双非学校的本科生的春招经历

    截止到目前各大公司的校招也已经基本进入尾声 xff0c 在这场春招中我也试着投递了几家公司 xff0c 但是效果不是太好 先说我投递的第一家 腾讯 xff0c 参加腾讯的笔试之前根本没有参加过任何相关的公司招聘的线上笔试 xff0c 这是我
  • C++多态的实例

    1 1 多态的概念 简单理解 xff1a 同一个接口 xff0c 多种实现方式 xff0c 让不同类的的对象对同一件事情可以采用不同方法去做 1 2 多态的作用 xff08 1 xff09 应用程序可以不必为一个派生类编写功能调用 xff0
  • Linux下的多进程编程——fork(),exec()等函数的使用

    Linux下的多进程编程初步 1 引言 对于没有接触过Unix Linux操作系统的人来说 xff0c fork是最难理解的概念之一 xff1a 它执行一次却返回两个值 fork函数是Unix系统最杰出的成就 之一 xff0c 它是七十年代
  • APM学习--Skywalking安装(5.0.0版本)

    Requirements JDK 6 43 xff08 instruments application can run in jdk6 xff09 JDK8 SkyWalking collector and SkyWalking WebUI
  • FreeRTOS消息队列

    FreeRTOS消息队列 队列又称消息队列 xff0c 是一种常用于任务间通信的数据结构 xff0c 队列可以在任务与任务间 中断和任务间传递信息 xff0c 实现了任务接收来自其他任务或中断的不固定长度的消息 xff0c 任务能够从队列里
  • 嵌入式前景怎么样

    现在物联网的发展也把之前大家没有注意过的嵌入式给带动起来了 xff0c 其实想去学习嵌入式的人还真不少 xff0c 不过这其中也会有人担心自己的发展前景 xff0c 下面可以一起先来了解下嵌入式前景怎么样 目前 xff0c 嵌入式开发人才需
  • datax同步数据:数据源:mongo,目标源:hdfs

    一 配置文件mongo hdfs json 34 job 34 34 setting 34 34 speed 34 34 channel 34 2 34 content 34 34 reader 34 34 name 34 34 mongo
  • 做程序媛这几年,感受?体验?

    首先 感受 和男程序员一个样 真不是废话 BUG是修不完的 但是不能放过它 因为你的内心会遭受煎熬 直接进入体验 就不用重复的文字去啰嗦了 直接上图哈 以下的这几种情况 在我的生活中 是真的不断出现 连样式都没变过 first 修电脑AND

随机推荐

  • 天猫精灵与oauth的认证接入流程(AliGenie智能家居接入流程)

    写在前面的叨叨 xff1a 对于天猫精灵的对接网上的教程也是颇少的 xff0c 所以希望我的记录过程也能对他人学习有所帮助 xff0c 要想学一样新的技术必须得找到相关技术文章好好专研了 xff0c 在学习的路上孜孜不倦 xff0c 偶遇难
  • 致敬2016年我的每一次选择。

    2016年 对我来说 是不平凡的 不是因为经历了什么永生难忘的经历也不是因为我做了什么伟大的事情 只是因为毕业了 我毕业了 多么开心却又悲伤的故事 我开心在我终于可以做自己想做的事情 悲伤的是当同学们的父母都陆续为他们铺好以后的路的时候 我
  • 打开计算机的管理需要在控制面板中创建关联

    今天在工作中发现当我选择计算机 管理时提示我需要在控制面板中创建关联 xff0c 如下图所示 xff1a 于是 xff0c 我便上百度搜索了一下 xff0c 答案是这样的 xff1a 修改 span style font family no
  • ftp身份认证时登录框反复弹出以及ftp常用配置

    1 若我们想访问一个人的ftp站点 xff0c 直接通过浏览器直接访问就可以了 xff08 ftp 要访问主机A的IP地址 xff09 如果对方开启了基本身份认证的话 xff0c 我们就需要输入正确的用户名及密码才可正常访问 xff0c 即
  • Linux下挂载U盘、ISO、光盘、rpm

    1 挂载U盘 1 xff09 将U盘连接到虚拟机后 xff0c 使用fdisk l xff08 注意 xff0c 这是list单词的首字母l xff09 命令查看当前U盘的设备符号 2 xff09 创建目录 mnt usb xff0c 以备
  • unity 3D学习日记:创建一个小场景并编写简单C#移动脚本

    学习Unity 3D第一周 xff0c 完成的目标一是创建一个小场景 xff0c 用角色控制器在场景里行走 xff1b 二是编写一个简单的移动脚本 一 创建一个小场景 xff0c 用角色控制器在场景里行走 1 先安装Unity 3D 5 3
  • 基于Unity3D平台的三维虚拟城市研究与应用

    0 引 言 随着现代城市的不断拓展延伸 城市空间多层次 立体模式管理逐渐成为城市规划管理的发展趋势 1 实现城市空间信息管理模式从二维到三维的转变 三维虚拟城市技术 已经成为人们关注和研究的热点 2 三维虚拟系统具有多维信息处理 表达和分析
  • unity:C#控制人在真实环境中行走

    自己在学习unity的课程中遇到了 xff0c 有的地方还没怎么太理解上去 xff0c 先做个笔记 xff0c 顺便看看有没有需要的人 1 搭建一个小场景 xff0c 一个需要控制的 人 xff08 添加CharacterControlle
  • unity 3D:自动寻路

    首先 xff0c 搭建一下场景 xff0c 场景要求 xff1a 有遮挡 xff0c 设置好不可走区域为navigation static 以及 not walkable 在人身上添加Nav Mesh Agent 设置好后勾选显示导航网格
  • 数据结构 ——c++实现(知识点集合)

    数据结构 c 43 43 实现 xff08 知识点集合 xff09 某不知名学狗的复习记录 xff0c 包含数据结构基本概念 xff0c 线性表 xff0c 栈 队列 递归 xff0c 串 数组 广义表和树和森林内容整理 主要整理了知识点
  • Unity3D 使用SceneManager跳转/加载场景

    很久没有更新博客了 xff0c 最近也是还在学习U3D 下面写一下使用SceneManager跳转 加载场景 我们假设要点击一个按钮跳转 xff0c 那么我们只要把跳转的代码写进按钮点击事件里就好了 其实加载场景很简单 xff0c 只需要写
  • [OpenCV] aruco Markers识别 小车巡线

    小车巡线代码 include lt ros ros h gt include lt sensor msgs Image h gt include lt geometry msgs Twist h gt include lt cv bridg
  • 备份ubuntu

    在使用Ubuntu之前 xff0c 相信很多人都有过使用Windows系统的经历 如果你备份过Windows系统 xff0c 那么你一定记忆犹新 xff1a 首先需要找到一个备份工 具 通常都是私有软件 xff0c 然后重启电脑进入备份工具
  • Docker - docker build 命令详解

    docker build 命令原理 docker build 命令从 Dockerfile 和上下文构建镜像构建的上下文 xff1a 位于指定 PATH 或 URL 中的一组文件构建过程可以引用上下文中的任何文件 xff0c 例如 xff0
  • RealSense二次开发

    转载 xff1a librealsense2查看相机设备信息 JavaShuo 文章目录 1 librealsense2设备信息读取 xff12 xff0e realsense 投影函数和反投影函数3 深度相机与彩色相机的坐标变换 1 li
  • 大规模MIP的精确算法和实现

    大规模MIP的精确算法和实现 大规模MIP的精确算法和实现 xff1a 目录第1部分 xff1a CPLEX的Java API详解1 CPLEX简介2 构建简单的模型3 CPLEX的高级应用 第2部分 xff1a Gurobi的Python
  • 两种Dockerfile文件配置

    注意 xff1a xxx是您的项目名称 xff01 Xmx xff1a 堆最大值 xff1b Xms xff1a 堆初始值 COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中 而ADD指令还支持通过URL从远程
  • 网络编程-----在线词典项目(服务器)

    服务器端 span class token macro property span class token directive keyword include span span class token string lt stdio h
  • 模型的图优化

    图优化 最近在整理之前的一些工作内容 记录下来温故而知新 在各种开源推理框架中 xff0c 我们总能看到有一种graph optimizer技术 xff0c 主要是对用户想要运行的网络模型进行一种网络结构层面的优化 xff0c 剔除不需要的
  • 学C++有多难,你知道吗?

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