[英]Is there any difference between auto and __auto_type?
我在 C 中使用__auto_type
有一段时间了,我想知道它与 C++ 中的auto
是否有任何不同。它们的实现方式不同吗?
我试过搜索这个,但它没有产生任何结果,因为在C 中搜索 __auto_type 会返回 C++ 中有关auto
的文章。感觉就像一个被遗忘的关键字。
正如 StoryTeller 评论的那样,它是 C 模式下的 GCC 分机。 它在 C++ 中不起作用
在 GNU C 中,而不是 GNU C++ 中,您还可以将变量的类型声明为
__auto_type
。 在那种情况下,声明必须只声明一个变量,其声明符必须只是一个标识符,声明必须被初始化,变量的类型由初始化程序确定; 变量的名称在初始化程序之后才出现在 scope 中。 (在 C++ 中,你应该为此使用 C++11 auto。)使用__auto_type
,上面的“最大”宏可以写成:#define max(a,b) \ ({ __auto_type _a = (a); \ __auto_type _b = (b); \ _a > _b? _a: _b; })
如您所见,它与 C++ 中的auto
并不完全相同,因为
auto
可以用于声明多个变量,如auto i = 0, *p = &i;
auto f();
或void f(auto);
它也不能在decltype(auto)
的情况下替换auto
,或者像const auto& i = expr;
一样使用因为C中没有这样的特征
不过后来Clang采用了这个关键字,并且在C++中也支持它,它和auto
完全一样,甚至可以用于C++98
此实现与 GCC 的不同之处在于还支持
__auto_type
中的 __auto_type,将其视为与auto
相同。 我没有看到任何不这样做的充分理由,因为否则打算从两种语言使用的标头不能使用它(您可以使用扩展为__auto_type
或auto
的定义,具体取决于语言,但是 C++ pre-11 是破碎的)。
Objective C也支持它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.