最令人烦恼的解析[重复]

2023-11-24

我在这里看到了一个代码Cpp Quiz[问题#38]

#include <iostream>

struct Foo
{
  Foo(int d) : x(d) {}
  int x;
};

int main() 
{ 
  double x = 3.14;

  Foo f( int(x) );

  std::cout << f.x << std::endl;

  return 0;
} 

据说这段代码格式不正确,因为Foo f( int(x) );将被视为函数声明而不是类型的对象声明Foo.

据我所知,这是“最令人烦恼的解析”的一个例子。我的问题是这个语法是什么int(x)在声明中Foo f( int(x) );意思是?到目前为止,我只看到了如下函数声明:

  1. Foo f( int ); and

  2. Foo f( int x );

是不是一样Foo f( int x );?


这个语法是什么int(x)在声明中Foo f( int(x) ); mean?

周围的括号x都是多余的并且会被忽略。所以int(x)是相同的int x这里,这意味着一个名为x与类型int.

是不是一样Foo f( int x );?

Yes. Foo f( int(x) );,是一个名为的函数声明f,返回Foo,采用一个名为x与类型int.

这是标准的解释。[dcl.ambig.res]/1:

(强调我的)

由于函数风格之间的相似性而产生的歧义 [stmt.abig] 中提到的强制转换和声明也可以出现在 声明的上下文。在这种情况下,选择是 函数声明带有一组多余的括号 参数名称和带有函数风格转换的对象声明 初始化程序。正如文中提到的含糊之处 [stmt.ambig],该决议是考虑任何可能的结构 可能是一个声明.

注意:声明可以是 通过在参数周围添加括号来明确消除歧义。 可以通过使用复制初始化或 列表初始化语法,或使用非函数样式的强制转换。

struct S {
  S(int);
};

void foo(double a) {
  S w(int(a));      // function declaration
  S x(int());       // function declaration
  S y((int(a)));    // object declaration
  S y((int)a);      // object declaration
  S z = int(a);     // object declaration
}

So, int(x)将被视为(参数的)声明而不是函数样式转换。

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

最令人烦恼的解析[重复] 的相关文章

  • C++ std::accumulate 没有给出预期的总和

    double numbers 1 0 5 0 333333 0 25 0 2 0 166667 0 142857 0 125 0 111111 0 1 std vector
  • 为 DocumentDb 设置自定义 json 转换器

    我正在使用类型化 DocumentQuery 从 Azure DocumentDb 集合中读取文档 from f in client CreateDocumentQuery
  • 如何使用C从http下载文件?

    最近几天我试图弄清楚如何从 URL 下载文件 这是我对套接字的第一个挑战 我用它来了解协议 所以我想在没有 cURL 库的情况下只用 C 语言来完成它 我搜索了很多 现在我可以打印页面的源代码 但我认为这与文件不同 我不必只将接收到的数据从
  • copy_from_user() 错误:目标大小太小

    我正在为内核模块编写 ioctl 处理程序 我想从用户空间复制数据 当我编译禁用优化的代码时 O0 gflags 编译器返回以下错误 include linux thread info h 136 17 error call to bad
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • C++中类成员函数相互调用有什么好处?

    我是 C 新手 我发现下面的编程风格对我来说很有趣 我在这里写了一个简化版本 include
  • 从结构调用 C++ 成员函数指针

    我找到了有关调用 C 成员函数指针和调用结构中的指针的信息 但我需要调用结构内部存在的成员函数指针 但我无法获得正确的语法 我在类 MyClass 的方法中有以下代码片段 void MyClass run struct int MyClas
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 自己绘制的WPF自定义滑块

    这是我关于堆栈溢出的第一个问题 所以不要踢它 我在尝试创建 Mac 风格的滑块控件时遇到问题 我已经发现这个解决方案 http www codeproject com KB miscctrl MAC Slider aspx我已经在我的解决方
  • 从图像创建半透明光标

    是否可以从图像创建光标并使其半透明 我目前正在拍摄自定义图像并覆盖鼠标光标图像 如果我可以将其设为半透明 那就太好了 但不是必需的 销售人员喜欢闪亮的 目前正在做这样的事情 Image cursorImage customImage Get
  • ASP.NET - Crystal Report Viewer 打印按钮在 ASP.NET 中不起作用

    我正在使用 Visual Studio 2008 但我遇到了水晶报告问题 当我单击打印按钮时 它会将我带到弹出窗口 但未找到页面 弹出的网址是 http localhost aspnet client System Web 2 0 5072
  • 运行实体框架自定义工具,它有什么作用?

    在 Visual Studio 中 当使用实体框架并为 tt 和 Context tt 文件应用运行自定义工具时 它是什么以及它有什么作用 为什么它解决数据库同步问题 有时 为什么我应该在运行 tt 之前运行它 Context tt 它被称
  • fgets溢出后如何清除输入缓冲区?

    当输入字符串超出其预定义限制时 我遇到了 fgets 的小问题 以下面的例子为例 for index 0 index lt max index printf Enter the d string index 1 if fgets input
  • 在多线程环境中捕获信号

    我有一个大型程序 需要尽可能具有弹性 并且有大量线程 我需要捕获所有信号SIGBUS SIGSEGV 并在必要时重新初始化有问题的线程 或者禁用该线程以继续减少功能 我的第一个想法是做一个setjump 然后设置信号处理程序 可以记录问题
  • 为什么存在系统调用

    我一直在阅读有关系统调用及其在 Linux 中如何工作的内容 我还有更多的阅读要做 但我读过的一件事都没有回答 那就是 为什么我们需要系统调用 我知道系统调用是用户空间程序要求内核执行某些操作的请求 但我的问题基本上是 为什么用户空间程序本
  • 异步/等待 - 是*并发*吗?

    我一直在考虑 C 5 中新的异步内容 并且出现了一个特殊问题 据我了解 await关键字是一个简洁的编译器技巧 语法糖来实现连续传递 http en wikipedia org wiki Continuation passing style
  • 使用通用存储库模式和流畅的 nHibernate

    我目前正在开发一个中型应用程序 它将访问不同站点上的 2 个或更多 SQL 数据库等 我正在考虑使用类似的东西 http mikehadlow blogspot com 2008 03 using irepository pattern w
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • NHibernate:无状态会话错误消息无法获取代理

    我正在使用 nHibernate 无状态会话来获取对象 更新一个属性并将对象保存回数据库 我不断收到错误消息 无状态会话无法获取代理 我在其他地方有类似的代码 所以我不明白为什么这不起作用 有谁知道问题可能是什么 我正在尝试更新Screen

随机推荐

  • SQLite 连接对象泄露 - Android

    我正在制作我的第一个 Android 应用程序 我首先学习了一些 sqlite 教程 它教我使用扩展 SQLiteOpenHelper 的 databaseHelper 所以我的databaseHelper确实扩展了SQLiteOpenHe
  • 如何提高 Access 中 ODBC 链接表的批量插入性能?

    我有 CSV 和 TXT 文件要导入 我将文件导入到 Access 中 然后将记录插入到链接的 Oracle 表中 每个文件大约有 300 万行 并且该过程需要很长时间才能完成 导入到 Access 中的速度非常快 但插入到链接的 Orac
  • 如何在 Hibernate 验证器中添加自定义错误消息

    我有一个像这样的简单课程 import javax validation constraints NotNull import org hibernate validator constraints Length public class
  • 简单的 html 与 vue.js 不起作用

    我和 vue js 的初学者点击了这个链接 https www sitepoint com getting started with vue js 几乎将代码复制到我的 html 中 但是它不起作用 有人可以帮我找出问题所在吗 这是所有代码
  • Nhibernate + QueryOver:使用Where 过滤敏感信息

    我正在尝试使用 QueryOver 在 nHibernate 中构建一个简单的查询 但我希望它将所有内容转换为小写或忽略敏感内容 Domain User User Session QueryOver
  • 为日期添加 10 秒

    如何向 JavaScript 日期对象添加 10 秒 像这样的东西 var timeObject new Date var seconds timeObject getSeconds 10 timeObject timeObject sec
  • Node.js Https请求错误

    我试过了文档中的示例而且效果很好 但是当我将网址更改为https api mercadolibre com sites 请求挂起 我唯一得到的是 Error socket hang up code ECONNRESET 这是我的代码 var
  • 使用 github 时“找不到 Visual Studio Web 请求处理程序”的解决方法?

    当我在 github 上选择 在 Visual Studio 中打开 时 出现以下错误 找不到 Visual Studio Web 请求处理程序 我相信这是由于 git client 协议处理程序未正确注册造成的 这里列出了 VS2015
  • String对象真的是通过引用吗? [复制]

    这个问题在这里已经有答案了 我一直在学习 新手 NET 但我有一些疑问 从书中的例子中我了解到 字符串是对象 然后是引用类型 所以 我做了这个测试 结果与我预期的不同 我真的很好奇 这是一个例外吗 因为 字符串 是特殊类型 class Pr
  • 如何在 java 中将堆栈跟踪添加到调试打印输出中

    从调试打印输出中打印堆栈跟踪的最简单方法是什么 在测试过程中 您通常想知道导致引发调试消息的情况的调用堆栈 如果您使用的是 log4j Exception e new Exception log error error here e 会将堆
  • JQuery 与其他 JQuery 库冲突

    我使用 jquery 作为模块 我的 joomla 模板有一个集成的 jquery 菜单 所以他们互相冲突 有没有办法解决这个问题 遵循模块的脚本代码
  • 从输入流获取文件名 (Java)

    如果我有这段代码 我如何保留原始文件的文件名或将其重新分配给新文件 InputStream input assetInfo openStream File t new File OutputStream out new FileOutput
  • 将 javascript 对象序列化为 json 并返回

    我正在使用 jQuery post 方法将一些数据发送到服务器 我不想自己构建 JSON 字符串 而是想简单地使用 JavaScript 对象 当我得到返回字符串 JSON 格式 时 我想自动构造一个相应的 JavaScript 对象 这可
  • 使用 Fluent NHibernate 将 List 映射到分隔字符串

    我的模型看起来像这样 public class Product public string Name get set public string Description get set public double Price get set
  • 如何在 Macos 中检测新文件或修改过的文件

    在Windows操作系统中 MS提供了ReadDirectoryChangesW和FindFirstChangeNotification API来检测新的或修改的文件 Mac OSX是否也提供相同的功能 在 Mac OS X Leopard
  • React - 如何将参数传递给事件处理程序

    好吧 我是 React 新手 关于事件处理程序的一件事真的非常困扰我 我似乎无法得到关于如何向它们传递参数的直接答案 到目前为止 我看到的有两种方法 Bind props squareClick bind this argument Inl
  • 如何使用 CSS 制作 V 形箭头?

    好的 所以每个人都知道你可以用这个来制作一个三角形 triangle width 0 height 0 border left 50px solid transparent border right 50px solid transpare
  • 在 PDO 查询上设置 group_concat_max_len

    我有以下查询 cases conn gt prepare SELECT GROUP CONCAT text SEPARATOR as texts year FROM cases GROUP BY year ORDER BY ano DESC
  • CardLayout 获取所选卡片的名称

    如何获取卡片布局中所选面板的字符串标识符 CardLayout 不知道当前选择的面板是什么 调用 show 方法时 您应该自己将其保留在内存中
  • 最令人烦恼的解析[重复]

    这个问题在这里已经有答案了 我在这里看到了一个代码Cpp Quiz 问题 38 include