auto 和 __auto_type 有什么区别吗?

2024-01-25

我一直在使用__auto_type在 C 语言中已经有一段时间了,我想知道它与auto在C++中。它们的实施方式不同吗?

我尝试过搜索这个,但它没有产生任何结果,因为搜索C 中的 __auto_type返回有关的文章auto在C++中。感觉就像一个被遗忘的关键词。


正如 StoryTeller 所评论的,它是 C 模式下的 GCC 扩展。它在 C++ 中不起作用

在 GNU C 中,但不是 GNU C++ 中,您还可以将变量的类型声明为__auto_type。在这种情况下,声明必须只声明一个变量,其声明符必须只是一个标识符,声明必须被初始化,并且变量的类型由初始化器确定;直到初始化程序之后,变量的名称才处于范围内。 (在 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 https://gcc.gnu.org/onlinedocs/gcc/Typeof.html

正如你所看到的,它是not完全一样auto在 C++ 中因为

  • 它只能用于声明单个变量,而auto在C++中可以用来声明多个变量,例如auto i = 0, *p = &i;
  • 它不能出现在函数(或 lambda)的返回类型或参数中,例如auto f(); or void f(auto);

也无法替代auto的情况下decltype(auto),或者像这样使用const auto& i = expr;因为C中没有这样的功能

然而后来 Clang 采用了这个关键字并且C++ 也支持它在哪里完全一样auto它甚至可以用于 C++98

此实现与 GCC 的不同之处在于还支持__auto_type在 C++ 中, 将其视为相同auto。我看不出有什么好的理由不这样做,因为 否则,打算从两种语言使用的标头都无法使用它(您 可以使用扩展为的定义__auto_type or auto取决于 语言,但 C++ pre-11 已损坏)。

添加对 GCC '__auto_type' 扩展的支持。 https://reviews.llvm.org/D12686

Clang++ 演示 https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(fontScale:14,j:1,lang:c%2B%2B,selection:(endColumn:1,endLineNumber:13,positionColumn:1,positionLineNumber:13,selectionStartColumn:1,selectionStartLineNumber:13,startColumn:1,startLineNumber:13),source:%27%23include+%3Ciostream%3E%0Aint+main()%0A%7B%0A++++__auto_type++x+%3D+4%3B%0A++++__auto_type++y+%3D+3.37%3B%0A++++__auto_type++ptr+%3D+%26x%3B%0A++++std::cout+%3C%3C+typeid(x).name()+%3C%3C+!%27%5Cn!%27%0A++++++++++++++%3C%3C+typeid(y).name()+%3C%3C+!%27%5Cn!%27%0A++++++++++++++%3C%3C+typeid(ptr).name()+%3C%3C+!%27%5Cn!%27%3B%0A+%0A++++return+0%3B%0A%7D%0A%27),l:%275%27,n:%270%27,o:%27C%2B%2B+source+%231%27,t:%270%27)),k:46.581196581196586,l:%274%27,m:100,n:%270%27,o:%27%27,s:0,t:%270%27),(g:!((h:compiler,i:(compiler:clang1100,filters:(b:%270%27,binary:%271%27,commentOnly:%270%27,demangle:%270%27,directives:%270%27,execute:%270%27,intel:%270%27,libraryCode:%271%27,trim:%271%27),fontScale:14,j:1,lang:c%2B%2B,libs:!(),options:%27-O1%27,selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:%275%27,n:%270%27,o:%27x86-64+clang+11.0.0+(Editor+%231,+Compiler+%231)+C%2B%2B%27,t:%270%27)),k:53.41880341880342,l:%274%27,m:100,n:%270%27,o:%27%27,s:0,t:%270%27)),l:%272%27,m:100,n:%270%27,o:%27%27,t:%270%27)),version:4

它还支持目标C https://twitter.com/armadsen/status/742812778512015361

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

auto 和 __auto_type 有什么区别吗? 的相关文章

随机推荐

  • 纯分裂的熵计算为 NaN

    我编写了一个函数来计算向量的熵 其中每个元素代表一个类的元素数量 function x Entropy a t sum a t repmat t 1 size a 2 x sum a t log2 a t end e g a 4 0 the
  • 如何在 jsonp ajax 调用中使用 type: "POST"

    我正在使用 JQuery ajax jsonp 我有下面jQuery 代码 ajax type GET url Login aspx Send the login info to this page data str dataType js
  • .erb 、 .rhtml 和 .html.erb 之间有什么区别?

    erb rhtml 和 html erb 之间有什么区别 真的没什么 这只是 Rails 1 和 Rails 2 之间理念的改变 在 Rails 2 之前 有 file rhtml file rxml 和 file rjs 在 Rails
  • 如何生成彼此不相交的正方形(随机定位、大小相等、随机旋转)?

    我一直致力于在 1x1 网格上生成一层随机旋转并放置的正方形 我已经能够生成在网格上随机放置和旋转的单个正方形 但我不确定如何改进代码以生成更多彼此不相交的随机正方形 当前代码如下所示 我的一个随机正方形的示例 https i stack
  • 如何正确重写克隆方法?

    我需要在我的一个没有超类的对象中实现深度克隆 处理检查的最佳方式是什么CloneNotSupportedException由超类抛出 即Object 一位同事建议我按以下方式处理 Override public MyObject clone
  • 通过 Groovy XML 解析器使用字符串作为代码

    我是 groovy 的新手 我希望这是一个简单的问题可以解决 我正在读取 xml 文档 然后我可以访问如下数据 def root new XmlParser parseText xmlString println root foo bar
  • 如何禁用 Google 跟踪代码管理器控制台日志记录

    将 Google 跟踪代码管理器添加到项目后 我在控制台中看到了很多日志条目 有办法禁用它吗 控制台日志充满了噪音 GoogleTagManager info Processing logged event vs with paramete
  • Node.js ENOENT 读取 PDF 文件

    我需要阅读 pdf 文件并使用pdf text extract 它在我的本地主机上完美运行 但是当我尝试在服务器上运行该程序时 出现以下错误 spawn called 0 pdftotext 1 layout enc UTF 8 tmp t
  • Keychain 中存储的字符串有长度限制吗?

    我想在iOS上将一些用户信息作为字符串存储在Keychain中 那么Keychain中的字符串有长度限制吗 Thanks 我组装了一个 iOS 应用程序 可以使用以下命令进行二分搜索这个图书馆 https github com kishik
  • twig - 将函数传递到模板中

    目前 我将函数放在一个类中 并将该类的实例传递到模板中 并将所需的函数作为类方法调用 unneededclass blah 我需要像下面这样做 blah 是否可以 更新 2015 年 5 月 14 日 评论者指出我大部分都是错的 如果您确实
  • 如何合并两个UIImage?

    我正在尝试合并两个不同的图像并创建一个新的图像 这就是我想做的方式 我有这张图片 A 这是一张 PNG 图像 我想将其与我从手机中获取的另一张图像 B 合并 以创建如下所示的图像 我需要一个将 A 与 B 合并创建 C 的函数 尺寸必须保留
  • Nuget Pack 不支持程序集版本上的位数

    I need nuget pack生成只有 3 位数字的包版本 我们想对其进行语义版本控制 但是当我在具有AssemblyVersion属性设置为 1 0 0 生成的 nupkg 文件在其元数据 和文件名 中以版本 1 0 0 0 结尾 为
  • 如何查看tomcat的容器日志?

    如何查看tomcat的容器日志 我从 catalina out 日志中收到此错误 SEVERE localhost startStop 1 org apache catalina core StandardContext startInte
  • 在 SQL Server 中,一行的 %%physloc%% 值总是相同吗?

    我一直在探索它的实际用途 physloc 伪列作为行标识符 不幸的是 我一直无法找到官方文档 physloc 我需要知道这个值是否会改变 我做了一些测试 看起来相当静态 即使我创建数据库的备份并在不同的服务器上恢复 physloc 每行保持
  • Kafka - 无法建立与节点-1的连接

    我正在尝试使用 apache flink 流处理 kafka 主题 但我遇到了这个问题 2018 04 10 02 55 59 856 ProducerConfig values acks 1 batch size 16384 bootst
  • 如何在 React 中重定向到外部链接?

    我正在构建一个画廊 您单击图像 它将使用 props 加载到单独的组件中 该图像是一个 URL 取自数组 其中 src 属性通过 CSS 作为背景图像加载 我的挑战是将 src 数据连接到子组件 查看原始问题 https stackover
  • 如何使用java中的线程读取和写入文件?

    我正在编写一个应用程序 需要从单个文件中读取块 每个块大约为 512 字节 我还需要同时写入块 我的想法之一是BlockReader implements Runnable and BlockWriter implements Runnab
  • C++11线程,在主线程上运行

    我正在尝试 C 11 线程进行一些开发 我想在异步线程中运行一些代码 当该代码完成后 我想在主线程上运行其他代码但只有当它完成时 这是因为我想要运行异步的事情是加载 OpenGL 的东西 并且在执行线程时使用 OpenGL 上下文有点棘手
  • xcodebuild 归档所有目标而不是一个

    我需要从我的档案中归档一个特定的方案xcodeproj 为此 我运行 xcodebuild archive scheme SCHEME target TARGET archivePath ARCHIVE PATH 虽然我明确地定义计划和目标
  • auto 和 __auto_type 有什么区别吗?

    我一直在使用 auto type在 C 语言中已经有一段时间了 我想知道它与auto在C 中 它们的实施方式不同吗 我尝试过搜索这个 但它没有产生任何结果 因为搜索C 中的 auto type返回有关的文章auto在C 中 感觉就像一个被遗