C++ 函数定义和变量声明不匹配?

2023-12-11

考虑这个非常简单的代码:

#include <memory>

class Foo
{
public:
    Foo() {};
};

class Bar
{
public:
    Bar( const std::shared_ptr<Foo>& foo ) {}
}; 

int main()
{
    Foo* foo = new Foo;
    Bar bar( std::shared_ptr<Foo>( foo ) );
    return 0;
}

为什么 Visual Studio 会报告

warning C4930: 'Bar bar(std::shared_ptr<Foo>)': prototyped function not called (was a variable definition intended?)

并且没有bar对象已创建...这条线怎么可以Bar bar( std::shared_ptr<Foo>( foo ) );被解释为函数定义?

我检查了类型名称后面的括号与 new 有区别吗?并且C++:警告:C4930:未调用原型函数(是有意的变量定义吗?),但我觉得我的问题在这里有所不同,因为我没有使用语法Foo() nor Bar().

编辑:请注意,它已成功编译:

Foo* foo = new Foo;
std::shared_ptr<Foo> fooPtr( foo );
Bar bar( fooPtr );

这个问题是关于C++ 最令人烦恼的解析。该声明:

Bar bar( std::shared_ptr<Foo>( foo ) );

声明一个名为的函数bar返回Bar并采用一个称为foo类型的std::shared_ptr<Foo>.

最里面的括号没有任何作用。就好像您写了以下内容:

Bar bar( std::shared_ptr<Foo> foo);

假设 C++11 (因为您已经在使用std::shared_ptr)你可以使用大括号语法代替插入语:

Bar bar(std::shared_ptr<Foo>{foo});

这实际上会构造一个对象bar类型的Bar,因为上面的语句由于大括号而不能被解释为声明。

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

C++ 函数定义和变量声明不匹配? 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 如何通过ajax将表单数据发送到python脚本?

    我正在努力处理 python 程序和 ajax 请求 我正在尝试将一些数据从 Javascript 获取到 python 程序中 我一直在使用 getfirst field name 的正常方法不起作用 我认为这是因为请求是通过 ajax
  • 在离开未保存更改的网页之前警告用户

    我的申请中有一些带有表格的页面 如何保护表单 以便在有人离开或关闭浏览器选项卡时 系统应提示他们确认是否确实要保留未保存数据的表单 简短 错误的答案 你可以通过以下方式做到这一点处理beforeunload事件并返回一个非空字符串 wind
  • iOS:UITableView 滚动太快时会混合数据

    我已经对 UITableViewCell 进行了子类化以向其添加自定义外观 在 MYTableViewCell 的初始化级别 我添加了 4 个子视图 UIImageView 和三个 UILabel 所有 4 个子视图都分配有不同的标签 在
  • Google 表格的活跃用户 VS 有效用户

    我正在编写一个简单的谷歌应用程序脚本应用程序 它根据请求页面的用户执行一些数据操作 根据谷歌文档对象 Session 有获取活动用户 and 获取有效用户 我目前使用它来确定用户 看一下代码 var email Session getAct
  • 操作栏下的进度栏

    问题摘要 我怎样才能做一个ProgressBar集成在内部ActionBar 就像在 Chrome 应用程序上一样 Details 看一下 Chrome 的截图 我想创建一个像这样的操作栏 在操作栏的正下方 有一个进度条 它根据页面加载情况
  • 具有可变宽度元素的 jquery 滑块

    是否可以创建一个 jquery 滑块 其中元素具有可变宽度 即并非所有元素都具有相同的宽度 如果是这样 我该怎么做 汉尼特 要设置 jQuery 滑块的宽度 只需使用 CSS 将其包装在 div 和样式中即可 您还可以通过 CSS 引用子元
  • 该解决方案可以安全地通过 webSoket 通信在网络上访问用户的私有证书吗?

    我们正在开发一个使用 https 协议 两种方式 的网页 我们需要访问用户的私有证书 因为我们需要通过用户的证书来签署文档 所以我们开发了一个通过Websoket与Web进行通信的Java应用程序 该应用程序将通过网络协议调用进行调用 与从
  • 检查同一列中是否有相似的字符串

    我有一个这样的数据框 df col1 col2 A the value is zero B this is a cat C the value is one D nothing is here E the colour is blue F
  • API 24 及更高版本中区域设置更改时出现 Android RTL 问题

    我试图在运行时更改应用程序的区域设置 它在 API 级别 24 以下的 Andorid 中工作正常 但在 API 级别 24 或更高版本中 布局方向不会根据区域设置而改变 下面是在运行时更改区域设置的代码 我使用了 LocaleHelper
  • 正则表达式匹配具有特定开始/结束的字符串

    我正在尝试匹配所有出现的以开头的字符串 并以一个空格结尾 我正在处理的文件是 OpenVPN 手册 我想要提到的所有选项 例如 option 我正在使用 Sublime Text 根据其备忘单 他们支持 A and Z表示字符串的开始和结束
  • IBM Worklight - 如何将参数从应用程序传递到适配器?

    我想将参数从应用程序传递到适配器 我希望应用程序的用户输入这些选项 现在我在适配器中传递这样的参数 function getFeeds WL Logger debug inside method var input method get r
  • “FBRequest requestForMe”无法识别的选择器

    第一次发帖 昨天刚刚下载了 FB iOS SDK 10 10 2012 我已完成以下列出的入门步骤https developers facebook com docs getting started facebook sdk for ios
  • 在 Kafka 流作业中进行同步数据库查询或静态调用是一个好习惯吗?

    我使用Kafka Streams来处理实时数据 在Kafka Streams任务中 我需要访问MySQL来查询数据 并且需要调用另一个Restful服务 所有操作都是同步的 恐怕同步调用会降低流任务的处理能力 这是一个好的做法吗 或者有什么
  • 命令模式下的垂直 vim 光标

    我在 Mac 上 我将终端光标设置为竖线选项 然而 在 vim 命令模式下 光标是竖线 但它不会让我使用 hjkl 转到行尾 它总是在行尾之前停止 这尤其令人烦恼 因为您必须在插入模式下使用箭头键才能使光标到达行尾 任何修复将不胜感激 例如
  • Grep 中“单词”的含义

    在 grep 的手册页中它说 gt The symbols lt and gt respectively match the empty string at the gt beginning and end of a word 这里的词是什
  • 将收到的订单 woocommerce 发送给经销商并发送电子邮件通知

    我有一个电子邮件 经销商 列表 当我在 wp admin 中收到订单时 我需要打开此订单并将此订单发送给经销商 商业 用户 每个经销商都有一封电子邮件 并在已发送给该经销商的自定义字段中标记此订单 在我的 woocommerce 订单页面中
  • Clang 相当于 GCC 的 -mwindows

    我知道如何指示 GCC 使用the mwindows flag 使用以下命令生成 PEIMAGE SUBSYSTEM WINDOWS GUI而不是IMAGE SUBSYSTEM WINDOWS CUI Windows子系统 Clang 提供
  • 如何更改构建配置以便 cmd 指向 python 解释器的实际位置?

    当我尝试通过 Sublime Text 2 运行 python 或任何语言时 它只说 Error 2 The system cannot find the file specified cmd u python u u u C Users
  • datepicker 禁用基于时间的日期

    我的网站上有一个日期选择器 但现在我想禁用基于时间的日期 我想实现两件事 我想禁用今天 用户不应该能够选择今天的日期 每天下午 2 00 后我也想明天禁用 通过jquery可以吗 根据一天中的时间更改 minDate 怎么样 var hou
  • C++ 函数定义和变量声明不匹配?

    考虑这个非常简单的代码 include