gpt4 book ai didi

c++ - C++ 预处理器中的 & 符号

转载 作者:行者123 更新时间:2023-11-30 04:04:47 25 4
gpt4 key购买 nike

那里。我对 C++ #define 语句中类名和变量名之间 & 符号的使用感到困惑。

我在xbmc源码中的globalhandling.hpp文件中找到了创建全局单例的方法。

我写了一个类似版本的代码片段来弄清楚它的作用。我在试验它时发现,当 & 只使用一个构造函数和析构函数时被调用。如果我省略它,一个构造函数和两个析构函数被调用。

在此上下文中 & 是否充当按位和/或地址运算符?

#include <iostream>
#include <boost/shared_ptr.hpp>

using namespace std;

class aClass
{
public:

aClass() { cout << "Constructor\n"; }


aClass getInstance() { return *this; }

void printMessage() { cout << "Hello\n"; }

~aClass() { cout << "Destructor\n"; }
};

#define GLOBAL_REF(classname,variable) \
static boost::shared_ptr<classname> variable##Ref(new classname)

#define GLOBAL(classname,variable) \
GLOBAL_REF(classname,variable); \
static classname & variable = (*(variable##Ref.get()))


GLOBAL(aClass,aVariable);

int main()
{
aVariable.printMessage();

return 0;
}

最佳答案

您所指的 & 符号大概是这个:

static classname & variable = (*(variable##Ref.get()))

在这种情况下,与号与 C 预处理器无关,它实际上是 C++ reference symbol .

您通常会用它来引用已声明的对象,类似于指针。

例如:

int a = 1;
int b = a;
int &c = a;

// a = 1, b = 1, c = 1.

b = 2;

// a = 1, b = 2, c = 1.

a = 3;

// a = 3, b = 2, c = 3. Note that variable 'c', which is a reference to 'a', has also changed.

c = 4;

// a = 4, b = 2, c = 4.

关于c++ - C++ 预处理器中的 & 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23595294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com