一个typedef能持续多久

How long does a typedef last for?

本文关键字:typedef 一个      更新时间:2023-10-16

我在一个函数中有一个宏,它实例化给定类型的变量(并做一些其他不相关的事情)。

本质上MACRO(foo, f)扩展为foo f;

但是,如果foostd::map<int, int>,则由于额外的逗号,扩展失败。

我通过写typedef std::map<int, int> bar;MACRO(bar, b)来解决这个问题。

不过,我担心我正在将typedef泄漏到程序源中,这可能会在将来给我带来问题。

那么,typedef持续多久?

typedef可用性的规则与变量的规则相同,因此在您的情况下,它将"持续"到函数体的长度。

你可以通过写自己验证这一点

{typedef std::map<std::string, std::string, iLT> location_map;}

并观察编译器错误:只要作用域块存在,typedef本身就超出了作用域。

typedef持续到全局范围或命名空间范围中的翻译单元结束。

或者当放在另一个范围内时范围结束。