学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++有多难,你知道吗? 的相关文章

  • 2021-10-12

    入行两年感慨 xff1a 不知不觉间 xff0c 踏入程序员行业已有两年的时间 xff0c 两年时间说长不长说短也不是很短 xff0c 这两年内 xff0c 我的技术得到了不少的提升 从当初的小白渐渐入了门 先自我说明 xff1a 本人19
  • ubuntu安装chrome浏览器

    1 准备好linux版本的chrome xff0c 下载网址 xff1a https www chromedownloads net chrome64linux 可以通过xshell将本地下载好的上传服务器 xff0c 文件后缀为 deb
  • 7年厨师想转行程序员

    7年厨师想转行 xff0c 跟我学java 可是工资只有7千我惊呆了 xff0c 我还以为7年厨师工资至少1万多呢 看来每个行业都有工资高也有工资低的 xff0c 他可能属于厨师里工资低的吧
  • 什么是项目干系人(project stakeholder)?

    stakeholder理论起源于企业管理领域 xff0c 最早由斯坦福大学在20世纪60年代提出 xff0c 到20世纪年代80年代逐步发展完善 xff0c 成为公司治理和权益保护的理论依据 美国经济学家弗里曼给出的stakeholder定
  • Decoupling GCN with DropGraph Module for Skeleton-Based Action Recognition

    Decoupling GCN with DropGraph Module for Skeleton Based Action Recognition 原文地址 xff1a https www ecva net papers eccv 202
  • Linux—微服务启停shell脚本编写

    run sh bin sh 端口号 PORTS 61 80 模块 MODULES 61 gateway 模块名称 MODULE NAMES 61 网关服务 jar包数组 JARS 61 gateway 1 0 0 SNAPSHOT jar
  • ASP.NET 实现轮播图动态查询数据库加载图片效果HTML+JS+SqlServer+C#(超详细)

    ASP NET 实现轮播图动态查询数据库加载图片效果HTML 43 JS 43 SqlServer 43 C xff08 超详细 xff09 炒鸡详细的轮播图哦 xff01 应用于你的各个地方 效果大概是这样子的 xff1a 点击两侧的箭头
  • 机器学习中的End-to-End到底是怎么回事?

    简单讲就是 xff0c Input gt 系统 xff08 这里指神经网络 xff09 gt Output xff08 直接给出输入 xff0c NN神经网络就给出结果 xff0c 一气喝成 xff01 xff01 xff01 xff09
  • Ubuntu 18.04.3 LTS安装和分区方案

    Ubuntu 18 04 3 LTS安装和分区方案 1 选择Install Ubuntu 2 键盘选择 3 选择下载 4 Installation type 选择Something else 来自定义分区 5 Ubuntu详细分区方案 pa
  • Android 开发的技术方向

    xff11 应用开发 xff12 源码级开发 分为系统应用开发 xff0c Framework开发 xff0c 底层浏览器内核开发 xff0c 音视频编码开发 虚拟机开发 底层驱动开发等系统ROM相关的开发 3 安全 逆向 xff0c 病毒
  • Java内存优化和性能优化的几点建议

    1 没有必要时请不用使用静态变量 使用Java的开发者都知道 xff0c 当某个对象被定义为stataic变量所引用 xff0c 这个对象所占有的内存将不会被回收 有时 xff0c 开发者会将经常调用的对象或者变量定义为static xff
  • Windows下安装和配置WSL

    百度百科描述WSL xff1a Windows Subsystem for Linux xff08 简称WSL xff09 是一个在Windows 10上能够运行原生Linux二进制可执行文件 xff08 ELF格式 xff09 的兼容层
  • 利用STM32的HAL库驱动1.54寸 TFT屏(240*240 ST7789V)

    项目 xff1a 温湿度表 芯片 xff1a STM32F030C6T8 液晶 华迪1 54寸 TFT屏 温湿度传感器 xff1a SHT30 主要对液晶屏官方驱动代码进行了增加和修改 一 STM32CubeMX建立工程 I2C1 给SHT
  • 数组中删数

    题目描述 在给定的数组中删除一个数 输入 多组测试 xff0c 每组第一行输入1个整数n xff08 n lt 20 然后是n个整数 第二行输入1个整数m 输出 删除在第一行的n个整数中第一次出现数字m并删除 xff0c 然后按照顺序输出剩
  • 做程序媛这几年,感受?体验?

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

    http www cnblogs com shuaiwhu archive 2011 06 15 2081552 html http download csdn net detail gz434933205 8728787
  • Java高级特性泛型看这一篇就够了

    泛型在我们工作中用到的很多 xff0c 但是很多同学其实对泛型不怎么了解 xff0c 包括我 xff0c 所以我们来一起学习一下泛型 xff0c 主要是从以下几点来介绍一下泛型为什么需要泛型 泛型类和泛型接口的定义 xff0c 泛型方法的辨
  • 基于链表的内存池算法

    include 34 head h 34 define INITPOOL 5000 每个的内存池的初始大小 define ADDPOOL 5000 每个新增的内存池的初始大小 define Byte 44 每个新分配内存字节数 typede

随机推荐

  • ubuntu linux下开启远程唤醒

    目录 启动远程唤醒 xff0c 需要主板支持才能进行 步骤一 xff1a 检查计算机硬件是否支持WOL wake on lan 功能 步骤二 xff1a 检查主板和电源是否支持WOL 步骤三 xff1a 检查网卡是否支持WOL 步骤四 xf
  • Depends:xxx but it is not going to be installed

    最近在Ubuntu16 04上编译opencv xff0c 但从最开始就遇到了头大的问题 xff0c 在下载安装依赖项时遇到Depends xff1a xxx but it is not going to be installed xff0
  • 打开计算机的管理需要在控制面板中创建关联

    今天在工作中发现当我选择计算机 管理时提示我需要在控制面板中创建关联 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 设置好后勾选显示导航网格
  • Java高级特性反射与动态代理模式

    文章目录 前言一 了解反射二 继续了解反射 xff08 哈哈哈 xff09 1 每一个类对应的class放在哪里 xff1f 2 这个class里面都保存了什么3 如何使用 xff1f 3 1 获取类加载器3 2 获取构造器对象3 3 获取
  • Unity3D 使用SceneManager跳转/加载场景

    很久没有更新博客了 xff0c 最近也是还在学习U3D 下面写一下使用SceneManager跳转 加载场景 我们假设要点击一个按钮跳转 xff0c 那么我们只要把跳转的代码写进按钮点击事件里就好了 其实加载场景很简单 xff0c 只需要写
  • Hisat2 Bowtie2比对结果解读

    Bowtie的中文意思是 xff1a 领结 xff0c 蝴蝶结 Bowtie2用户手册 xff1a http bowtie bio sourceforge net bowtie2 manual shtml 在看比对结果前需要了解三个概念 x
  • React 项目启动报错:The “path” argument must be of type string

    今天下载一个旧的React项目 xff0c yarn start 运行 xff0c 报错 xff1a TypeError ERR INVALID ARG TYPE The path argument must be of type stri
  • Android 身份认证基本概念

    身份验证 Android 采用通过用户身份验证把关的加密密钥机制 xff0c 该机制需要以下组件 xff1a 加密密钥存储和服务提供程序 存储加密密钥并基于这些密钥提供标准加密例程 Android 支持由硬件支持的密钥库和 Keymaste
  • Gnome增加消息提醒extension 适用于聊天工具如xchat "message notifier" "notifications alert" "permanent notification&quo

    使用如xchat这样的聊天工具 xff0c 有人跟你说话时 xff0c 在KDE桌面中 xff0c 默认系统托盘中的xchat托盘会闪烁 xff0c 直到你点击将xchat切换到前台 xff0c 这是xchat在preference可以设置
  • 读取文件报错:FileNotFoundError: [Errno 2] No such file or directory

    文章目录 问题描述问题分析解决办法 问题描述 使用 img 61 Image open 39 data DSC 8923 jpg 39 读取一张图片时 xff0c 报 FileNotFoundError Errno 2 No such fi
  • CentOS7离线安装图像化界面踩坑及脱坑历程

    CentOS7离线安装图像化界面 背景安装问题尝试一 xff1a 尝试二 xff1a 其他问题总结 背景 很久之前实验室的一台服务器安装了CentOS 7 6 1810版本的linux系统 xff0c 然而当时安装系统的同学不知出于什么目的
  • Eslint 配置及规则说明

    中文官方网站 基本使用教程 安装 可以全局安装 xff0c 也可以在项目下面安装 如下是在项目中安装示例 xff0c 只需要在 package json 中添加如下配置 xff0c 并进行安装 xff1a gt 34 eslint 34 3
  • Ubuntu自动登录图形系统界面(免密码、开机自启动)

    Ubuntu自动登录图形系统界面 xff08 免密码 开机自启动 xff09 操作系统版本 xff1a 18 04 修改50 unity greeter conf xff0c 使其允许root登录 span class token func
  • 学C++有多难,你知道吗?

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