C++ static、const对象声明与定义 问题来源?

C++ static与const用法详解 目录 static的作用: 对普通变量: 1.局部变量: 2.全局变量 对类中变量: 1.成员变量 2.成员函数 const的作用: static的作用: 对普通变量: 1.局部变量: 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。 1)内存中的位置:静态存储区 2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化) 3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用... 阅读详情

问题源自书《C++primer》(第四版·特别版)。

书401页下面注意中写道:

 

const static 数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体之外进行定义。

 

 

 

书402页页首写道:

 

在类内部提供初始化时,成员的定义不必在指定初始值:

 

参看代码是:

 

class Account{

      ...

    private:

           static const int period = 30;

            ...

};

 

类体外的定义:

 

const int Account::period;

 

 

 

就这里开始,自己写了一个class,类体中提供了const static的初始值,在类的实现文件中定义这个成员是就出现了错误:

类似:

static int const TestClass::m_cnsta_var" (?m_cnsta_var@TestClass@@0HB) already defined in demo_static.obj

但是有一个例子就可以很好的走:

不过这个例子是在一个文件中。

其实我的疑问就是:

《C++primer》上说的在类体外定义,说的是在类定义体外还是在类的作用域之外?

 

在类体之外,可以是在实现文件中,但是不行!

 

在类作用域之外?即就是在main函数所在文件中(在此处就三个文件)。再次编译错误与上面的一样。

 

那书上的这个是什么意思?不解。。。

微信小程序反编译实战:用wxappUnpacker获取他人源码的完整流程(附常见报错解决方案) 本文详细解析了微信小程序反编译的完整流程,从缓存提取到源码重构,使用wxappUnpacker工具链实现逆向工程。涵盖环境配置、解密反编译、项目调试等关键步骤,并提供了常见报错解决方案,帮助开发者学习优秀实现方案或进行安全审计。 阅读详情

相关推荐

实战指南 | 利用TSMaster的C小程序实时监控DBC报文发送周期

本文提供了一份利用TSMaster的C小程序实时监控DBC报文发送周期的实战指南。通过创建用户变量、编写C小程序核心逻辑并关联图形模块,工程师可以直观地可视化关键报文(如ID 0x64)的发送间隔,从而快速发现周期异常,提升汽车电子开发和测试中总线问题定位的效率与实时性。

weixin_29178069的博客 417

C++ 类中const成员 static 成员 const static 成员定义及初始化

C++类中的 1)、const 成员,只能在构造函数初始化列表里定义,不能再类外定义,是属于类的一个对象的常量数据成员,不是属于整个类的 2)、static成员,需要在类外定义,不需要加static关键字,方式为:type> 3)、static>

豆子的collection 806

8.5/Q1,Charls最新高分文章解读!

8 257名受试者中,672人(8.14%)在9年内发生过卒中。在调整的多因素cox回归模型中,TyG和ABSI仍然是卒中的预测因素,TyG的HR为1.25(95%CI:1.06~1.47),ABSI的HR为1.33(95%CI:1.06~1.68)。TyG和ABSI联合诊断效能最高(AUC:0.579,95%CI:0.553~0.597),而TyG(AUC:0.566,95%CI:0.544~0.587)和ABSI(AUC:0.533,95%CI:0.524~0.597)的诊断效能最低。

gsky_sci的博客 1015

static函数是声明还是定义起作用_那些年你定义过的变量与函数,你真的了解它么...

学习语言,定义过的变量与函数,数不胜数,而他们从哪来,存在于哪,又在何时消失,你都还记得吗,一起来回忆一下吧,哪些年与我们并肩作战的变量与函数。变量的存储类别1.内存:物理内存、虚拟内存物理内存: 实实在在存在的存储设备虚拟内存:操作系统模拟出来的内存。在写应用程序时,看到的都是虚拟地址2.在运行程序的时候,操作系统会将虚拟内存分区。1)堆在动态内存申请的时候,在堆里开辟内存2)栈主要存放局部变量...

weixin_32287177的博客 1470

STM32输入捕获功能,同时捕获8路波形。

STM32输入捕获功能,使用TIM2和TIM3同时捕获8路波形。 工作上的一个需求,要采集两组控制步进电机的信号。就是采集8个通道的方波,测量频率和计脉冲个数。看起来简简单单的东西,磕磕碰碰搞了两天,走了一些弯路,这里写出来记录一下。顺便理解一下输入捕获个多种用法。 1. 硬件设计 首先看一下用到那些IO口。在STM32手册里找这样TIMx_CHx的就是输入捕获的口了。 这里用了TIM2的4个口和TIM3的4个口。 定义 端口 TIM2_CH1 PA0 TIM2_CH2 PA1 TI

qq_36353009的博客 5123

你一直忽略的神器:离你最近的超强语音输入法(微信语音输入全攻略,支持全局混用)

你一直忽略的语音输入工具🎤 ,其实就在身边!无需额外软件,即可实现全局语音转文字⚡ 支持中英文混输,还能与其他输入法混合使用,聊天、办公都能高效完成,让你的输入效率轻松翻倍🚀

XiaoqiangClub的博客 907

定义和声明以及extern、static关键字

1. 定义只能进行一次,声明可以多次。 2. 变量定义是为变量分配存储空间,也可以初始化,不初始化的定义如:int i; 3. 声明是表明变量的类型和名称,因此定义也是声明。 4 . 没有初始化的时候,有extern表示这是声明,不是定义,不分配存储空间,如:extern int i; 5. 但是如果有初始化时,即使加了extern也是定义,如:extern int i =

cj19920421的博客 2409

国产麒麟V10系统命令大全,100个实用命令助你玩转系统!

国产麒麟V10系统命令大全,100个实用命令助你玩转系统!

网络技术联盟站 1909

static变量在类中是声明而不是定义

添加链接描述

qq_44879626的博客 323

DeepLabv3+改进68:全网首发-添加DBlock模块 |高效且鲁棒的多任务低光图像修复神经网络

本文提出了一种高效鲁棒的多任务低光图像修复神经网络DarkIR,针对夜间或昏暗条件下图像存在的噪点、光线不足和模糊问题。不同于现有方法分别处理去模糊和低光增强任务,该模型采用新的注意力机制增强CNN感受野,在降低计算成本的同时,在LOL-Blur、LOLv2和Real-LOLBlur数据集上取得最优结果,并能良好泛化到真实夜间图像。

AIcurator的博客 325

【ESP 保姆级教程】玩转emqx数据集成篇④ ——数据桥接之HTTP服务

主要是学习数据桥接功能以及构建自己的http服务器,这是一个非常有用的功能。包括各种传感器上报基本上都需要数据桥接功能支持,所以还是希望认真学习这一块开发,然后结合数据库存储等等知识点进行进一步学习。

单片机菜鸟哥的博客 1307

C/C++:头文件与cpp文件的声明/定义

一、头文件 1、 一般来说,头文件仅仅用于声明,相应的定义要放在对应的cpp文件中。  声明的内容一般可以是:1. 类定义体;2.类中的成员方法; 3. 类外的函数; 4. 类外的变量;5. 类型。   一个文件(比如main.cpp)包含(#include)了一个头文件(比如item.h),就相当于声明了Item.h中声明的所有内容。 2、但是const常量,inline函数,static函数...

yongjunhe的专栏 5488

生成对抗网络(GAN)在数据增强中的应用【附核心实战代码】

生成对抗网络(GAN)由Ian Goodfellow等人在2014年提出。它包含两个主要的部分:生成器(Generator)和判别器(Discriminator)。生成器负责生成假数据,而判别器则用于区分输入的数据是真实的还是由生成器生成的。通过这种对抗过程,生成器不断优化自己,生成越来越真实的样本。最终,生成器生成的样本几乎无法被判别器区分与真实数据。

一键难忘的博客 3120

static, const, static const 与 const static

1. static const/ const static, 意义一样 namespace NdpiTransformersTest { class TestMain { public: ~TestMain(); static int run(int argc, const char** argv); private: static ConfigMgmtDataTypes::Co...

wenmin_shu的专栏 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++中const 、static、 static const和const static的初始化以及修改问题

转载自  http://blog.bccn.net/zpcdbc/categories/119746 一、const、static、static const、const static变量的初始化 Ⅰ.const的初始化 (1)只有这一种情况const变量可以不在声明的同时定义,那就是const变量作为类的数据成员出现时。例如: class Myclass { cons in

bjyddxhfxq的博客 7149

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【C++】const和static的用法

本文介绍了C++中const与static关键字的用法及其结合应用。const主要用于限制变量/对象的可修改性,包括修饰普通变量、指针、函数参数/返回值、类成员和对象等场景。static则用于改变变量/函数的存储周期或作用域,包括修饰全局变量、局部变量以及类成员变量/函数。两者的结合应用主要体现在"类的静态常量"(static const)上,用于定义类级别的共享且不可修改的常量。文章通过具体代码示例详细说明了各种用法,帮助读者理解这两个关键字的正确使用方式。

2402_88461821的博客 1535

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++头文件中声明变量 const与static

背景 在平时写程序中,我们常常需要使用全局变量,但是如果在头文件(.h文件)中声明变量(非const常量)时,若有多个.cpp 文件include这个头文件时会出现多次定义的错误。 如在a.h文件中: // a.h 文件 #include<iostream> int a ; void f(); 在a.cc文件中: // a.cc 文件 #include "a.h" void f()...

Z1042300201的专栏 1852

const与static

const与static的理解

qq_61605392的博客 1914

C++中的const static this

前面我们说到了C++中的类创建,其中类包括了函数,变量,以及构造函数,但是和C语言当中一样,我们对变量和函数有const和static修饰,在C语言当中我们用const修饰变量表示不可修改的变量,那么在C++中是不是也是这样呢?明确告诉大家,有共同点也有不同点,大多是不同的

2301_78622258的博客 1385

C++ const 与 static 详解:变量、函数、类成员的全面解析

C++中的const和static关键字是控制变量行为和存储方式的核心工具。const用于声明不可变性,可修饰变量、函数参数和成员函数,保证数据不被意外修改;static则控制存储期和链接性,使局部变量持久化、限制全局变量作用域,并实现类成员的共享。两者结合可定义类级别的编译期常量(static constexpr)。使用时需注意const成员函数不能修改状态、static成员需在类外定义等规则,遵循优先使用constexpr、参数用const&等最佳实践,以提升代码安全性和性能。

保持分享欲 1232

关键字 extern static const, 声明和定义的区别

原帖 http://hi.baidu.com/bwandmff/blog/item/56876b30a31d519da9018e9a.htm在讨论全局变量之前我们先要明白几个基本的概念:1. 编译单元(模块):    在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌入式下做开发工作的

DOS5GW的专栏 1421

C++中的 const和static 以及 static const 和const static

对于C/C++语言来讲,const就是只读的意思,只在声明中使用;static一般有2个作用,规定作用域和存储方式.对于局部变量,static规定其为静态存储方式,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见;对于static函数也是在当前模块内函数可见. const定义的常量在函数执行之后其空间会被释放,而static...

mhjie1998的博客 3216

C++之const和static的区别

const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。 在C++中,static静...

zyc2018的博客 4933

C++ const 和static 区别

const定义的常量在超出其作用域之后其空间会被释放。      在C++中,const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。       const数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类的声明中初始化const数据成员,因为类的

freedom62的博客 5249
上一篇: C++ static、const对象声明与定义 --续集--疑问?
下一篇: 站在窗口的时候
Qicz
博客等级 码龄16年 56粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值