繁体   English   中英

auto 和 __auto_type 之间有什么区别吗?

[英]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; })

https://gcc.gnu.org/onlinedocs/gcc/Typeof.html

如您所见,它与 C++ 中的auto并不完全相同,因为

  • 它只能用于声明单个变量,而 C++ 中的auto可以用于声明多个变量,如auto i = 0, *p = &i;
  • 它不能出现在 function(或 lambda)的返回类型或 arguments 中,例如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_typeauto的定义,具体取决于语言,但是 C++ pre-11 是破碎的)。

添加对 GCC 的“__auto_type”扩展的支持。

Clang++ 演示

Objective C也支持它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM