我是给同一个变量赋值还是重新定义一个新变量
Am I assigning to the same variable or redefining a new variable?
在A.h:中
#ifndef A_h
#define A_h
#include "string"
extern std::string a;
#endif
在A.cpp中,在全局范围内:
#include "A.h"
std::string a = "a";
您没有重新定义变量,因为您的代码只有一个定义——CPP文件中的定义。标头中的是一个声明,因为它使用了extern
关键字。CPP文件为标头中声明的变量提供了一个定义。
这样想:编译器只看到一次A.cpp。如果您的项目有许多#included A.h的源文件,那么编译器在处理所有*.cpp文件时,会多次看到A.h,每个#include一次。在这种情况下,有一个定义和多个声明是合乎逻辑的
你所拥有的是正确的-一个a.cpp中全局范围内的变量。作为全局和非静态的,它有可能在其他地方使用。事实上,如果不在其他地方使用,它会污染命名空间。
相关文章:
- 用C++中的一个变量定义一个常量
- 变量定义到C++布尔值转换
- 未声明的标识符错误,但变量定义正确 (?)
- C++多线程程序:变量定义为类成员的隔离错误
- 将变量定义为静态时,为什么可以多次定义它
- 初始值设定项列表与构造函数赋值与变量定义
- 如何根据传递给函数的变量定义特征矩阵大小
- C++ 描述如何使用来简化变量定义
- 如何转发声明依赖于变量定义的类,而变体定义又依赖于模板化类?
- 是否修改其声明语句中的变量定义良好
- 使用类的其他成员变量定义类的成员变量数组
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 元组 std::get() 不适用于变量定义的常量
- 全局使用变量定义和C 声明
- C++变量定义中的易失性类型量词位置
- 将变量定义为数组和正确的语法
- 多个,包括具有变量定义的头文件
- 调用构造函数,并将成员作为参数解析为变量定义
- 逗号分隔变量定义中关系前的序列
- 如何使用命名变量定义常量右值引用参数的默认值