当前位置: 首页 > news >正文

c++ 可以再头文件种直接给成员变量赋值吗

在C++中,你通常不能在头文件中直接给类的成员变量赋值,因为这会导致每个包含该头文件的源文件中都尝试进行赋值,从而引发多重定义错误。然而,你可以在类的构造函数中初始化成员变量,或者在类声明中使用初始化列表或默认成员初始化器来给成员变量设定默认值。

下面是一些示例来说明如何在类定义中初始化成员变量:

使用默认成员初始化器(C++11及以后版本):

class MyClass {
public:
int myVar = 10; // C++11开始支持在类定义中直接初始化成员变量
};

使用构造函数的初始化列表:

class MyClass {
public:
int myVar;
MyClass() : myVar(10) { // 在构造函数的初始化列表中赋值
// 构造函数体
}
};

在类的实现(.cpp文件)中,你也可以在构造函数体内对成员变量进行赋值,但通常推荐使用初始化列表,因为它更高效:

MyClass::MyClass() {
myVar = 10; // 在构造函数体内赋值
}

直接在头文件中给成员变量赋值(除了使用默认成员初始化器)是不合适的,因为头文件通常会被多个源文件包含。如果头文件中包含可执行代码(如赋值操作),这会导致每个包含该头文件的源文件都包含这段代码,从而可能引发链接错误,因为链接器会发现多个定义。

总之,你应该避免在头文件中直接写赋值语句,而是使用构造函数、初始化列表或默认成员初始化器来初始化成员变量。

http://www.lryc.cn/news/393412.html

相关文章:

  • 47.HOOK引擎优化支持CALL与JMP位置做HOOK
  • liunx上修改Firefox版本号
  • bug——多重定义
  • 将堆内存的最小值(Xms)与最大值(Xmx)设置为相同的配置,可以防止JVM在运行过程中根据需要动态调整堆内存大小
  • 安装 tesseract
  • 为适配kubelet:v0.4 安装指定版本的docker
  • vivado CLOCK_REGION、CLOCK_ROOT
  • alphazero学习
  • 剖析DeFi交易产品之UniswapV3:交易路由合约
  • Agent下载安装步骤
  • 2024年AI技术深入研究
  • Apache Seata分布式事务启用Nacos做配置中心
  • Emacs之解决:java-mode占用C-c C-c问题(一百四十六)
  • go语言day10 接口interface 类型断言 type关键字
  • Java实现登录验证 -- JWT令牌实现
  • liunx文件系统,日志分析
  • Apipost接口测试工具的原理及应用详解(二)
  • 「AIGC」大数据开发语言Scala入门
  • 2.1 tmux和vim
  • 运行vue : 无法加载文件 C:\Program Files\nodejs\node_global\vue.ps1,因为在此系统上禁止运行脚本。
  • Lambda架构
  • 数据库作业day3
  • 计算机网络——数据链路层(以太网扩展、虚拟局域网、高速以太网)
  • Nuxt 项目集成第三方UI组件库(九)
  • vulnhub靶场之Jarbas
  • 解决onlyoffice警告的一些思路
  • 快速上手指南:使用 Minikube 在本地运行 Kubernetes 集群
  • 【C语言】指针(1):入门理解篇
  • 经典双运算放大器LM358
  • adb不插usb线通过wifi调试