我是给同一个变量赋值还是重新定义一个新变量

Am I assigning to the same variable or redefining a new variable?

本文关键字:变量 定义 新变量 一个 新定义 同一个 赋值      更新时间:2023-10-16

在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中全局范围内的变量。作为全局和非静态的,它有可能在其他地方使用。事实上,如果不在其他地方使用,它会污染命名空间。