8

我想用不同的名称调用同一个变量,如何为其分配别名?

我是否坚持使用宏,例如

#DEFINE Variable Alias

总之:

  1. 我更喜欢在 C 中应用它
  2. 我有一个信号,它可以是不止一种变量(温度、距离等)
  3. 我想为该信号分配多个别名

我目前在 C 中使用函数作为重命名方法。

所以给定变量:int signal

我会做以下

int Temperature(){return signal;}
4

6 回答 6

29

在 C++ 中为变量提供别名的方法是使用引用。例如,

int i = 42;

int& j = i;       // j is an alias for i
const int& k = j; // k is an alias for i. You cannot modify i via k.
于 2013-06-10T14:11:19.840 回答
8

你说

int a, *b;
b = &a; // *b is now an alias of a

我喜欢将指针视为在您为它加星号时为您提供变量的东西,而与符号则是别名生成运算符。

于 2013-06-10T14:14:35.233 回答
7

Eric Lippert 答案的替代方案:

int a;
int * const b = &a;

现在*ba不能指向其他任何东西一样,编译器不会生成额外的代码来处理aor *b,也不会为指针保留空间。

于 2016-06-03T13:27:58.697 回答
5

C ++,类似于:

struct A{
    union{
        int temperature;
        int sametemperature;
    };
};
A a;
a.temperature = 2;
a.sametemperature = 3;

根据编译器和兼容性标志,您可以在纯 C 中摆脱这种情况。简而言之,尝试利用匿名联合。问题很旧,但是,我一直在寻找同一个问题的答案,并意识到有一个没有指针/引用或宏的解决方案。

于 2017-08-10T14:59:34.897 回答
3

为什么不将它作为参数传递给函数并在函数参数中使用适当的名称?我不认为#define 是一个好主意,因为它可能会导致混淆。那是在 C 中。当然,您可以在 C++ 中使用别名。

于 2013-06-10T14:12:31.723 回答
1

我认为#define 不是为这个用例设计的。首先,因为它是在程序编译之前处理的预处理器指令。你失去了让编译器给出有意义警告的机会,你最终可能会遇到一个难以修复的奇怪错误或警告。

指针似乎可以工作,但您每次都需要使用 *(取消引用运算符),这很危险,更难阅读,如果您错过 *,您可能会遇到分段错误或类似的内存错误。

尝试发布一些代码,我们可能会找到适合您需求的适当解决方案。

于 2013-06-10T14:26:31.280 回答