簡體   English   中英

帶有 #define 的 C++ 類型別名

[英]C++ type aliases with #define

我知道我們可以使用typedefusing來制作類型別名。 但是,如何使用#define 例如:

#define integer int

我應該使用它而不是usingtypedef嗎?

我應該使用它而不是 using 或 typedef 嗎?

可能不是。 我不知道在任何情況下宏會以任何方式更好,但客觀上來說類型別名更好是有原因的。 最重要的是,類型別名被作用域包圍。

當您不能使用宏時,沒有理由使用宏。 宏不知道作用域或命名空間。 宏在實際編譯發生之前被替換,因此宏不是 C++ 實體。 考慮例如:

#define integer int

struct Foo
{
    int integer;
};

GCC 發出以下錯誤消息:

<source>:5:5: error: multiple types in one declaration
    5 |     int integer;
      |     ^~~
<source>:1:17: error: declaration does not declare anything [-fpermissive]
    1 | #define integer int
      |                 ^~~
<source>:5:9: note: in expansion of macro 'integer'
    5 |     int integer;
      |         ^~~~~~~

由於宏的原因,消息不必要地冗長。 在閱讀時,我必須通過宏遵循間接性以了解發生了什么。

另一方面,這:

using integer = int;

struct Foo
{
    int integer;
};

編譯沒有問題。 Foo有一個名為integer的成員。 這只是數百萬使用宏導致混淆的情況之一。

請參閱此處了解有何不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM