指针、引用和常量引用参数的函数调用歧义

2024-01-11

我想做的是,允许使用 setter 函数传递指针、引用或常量引用:

class A{
    std::string * p;
    std::string st;

    public:
    A():p(0)
    {}
    A& setS(const std::string& s){
        std::cout<<"called with const std::string&\n";
        st = s;
        p = &st;
        return *this;
    }
    A& setS(std::string& s) {
        std::cout<<"called with std::string&\n";
        p = &s;
        return *this; 
    }
    A& setS(std::string* s) {
        std::cout<<"called with std::string*\n";
        p = s;
        return *this; 
    }
};

int main(){
   std::string s;
   A a;
   a.setS(std::move(s)) //const std::string&
    .setS("")           //const std::string&
    .setS(s)            //std::string&
    .setS(0);           //std::string*
    //if std::string* version is not defined,
    //setS(0) calls the const std::string& version and throws exception 
    return 0;
}

但我已经看到,如果指针版本不存在,setS(0)称为const std::string&的版本setS()功能。

指针和参考版本之间或其他重要版本之间是否存在歧义?它是否定义良好并期望在所有编译器中以相同的方式工作?


没有任何歧义。当你有A& setS(std::string* s)然后在过载集中setS(0)调用指针版本并0是一个空指针。这相当于setS(nullptr).

When A& setS(std::string* s)不在重载集中,那么编译器会查看是否有办法可以从中构造临时字符串0然后将其传递给A& setS(const std::string& s)自从一个const&可以绑定到临时的。std::string可以从单个指针构造并再次构造0它作为空指针运行。所以你得到了一个临时的空指针构造std::string传递给const&功能。

但这是未定义的行为。构造函数为std::string要求传递给它的指针是一个以 null 结尾的 c 字符串。如果不是,则行为未定义。

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

指针、引用和常量引用参数的函数调用歧义 的相关文章

  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 如何在 Android NDK 中创建新的 NativeWindow 而无需 Android 操作系统源代码?

    我想编译一个 Android OpenGL 控制台应用程序 您可以直接从控制台启动 Android x86 运行 或者从 Android x86 GUI 内的 Android 终端应用程序运行 这个帖子 如何在 Android NDK 中创
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 检查算术运算中的溢出情况[重复]

    这个问题在这里已经有答案了 可能的重复 检测 C C 中整数溢出的最佳方法 https stackoverflow com questions 199333 best way to detect integer overflow in c
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 在非活动联合成员上使用“std::addressof”是否定义明确[重复]

    这个问题在这里已经有答案了 下面的代码是尝试实现constexpr的版本offsetof在 C 11 中 它可以在 gcc 7 2 0 和 clang 5 0 0 中编译 这取决于申请std addressof工会非活跃成员的成员 这是明确
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 结构体指针的动态数组

    我必须使用以下代码块来完成学校作业 严格不进行任何修改 typedef struct char firstName char lastName int id float mark pStudentRecord pStudentRecord
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 由于上下文丢失,WebGL 场景无法渲染

    我有一个带纹理和不带纹理的道路 3D 模型 当我加载没有纹理的道路时 一切正常 60fps 但是当我加载带有纹理的道路时 有两种变体 1 如果 3D 模型不大 那么它可以加载并工作 但 fps 非常低 10 20 2 如果 3D 模型很大
  • PDO 语句比 MySQL CLI 花费的时间长 400 倍 [重复]

    这个问题在这里已经有答案了 我正在运行一个 PDO 准备语句来从大约 6k 行的表中进行选择 由于 WHERE 语句具有约 5k pId 因此该特定查询最终返回所有行 该表在 pId 列上也有一个索引 SELECT FROM table a
  • 如何让 geom_text 与 ggplot2 左对齐

    我想左对齐geom text层与ggplot2 我正在使用以下代码 library tidyverse library hydroGOF library scales summ lt df gt group by Date gt summa
  • Selenium 2 StaleElementReferenceException 将 DropDownList 与 AutoPostBack 与 InternetExplorerDriver 一起使用时

    我正在使用 Selenium 2 使用 InternetExplorerDriver 测试 asp net Web 表单页面 并且遇到 StaleElementReferenceException 该页面包含一个 自动回发 下拉列表 我从中
  • 用千分尺查询数据

    我们有这个奇特的监控系统 我们的 spring boot 服务通过千分尺将指标发布到流入数据库 有一个不错的 grafana 前端 但问题是我们现在处于这样一个阶段 我们必须在其他服务中提供其中一些指标来进行推理 整个体系是我的前任建立的
  • Android 中将值从一个 Activity 传递到另一个 Activity

    您好 我开发了一个应用程序 它有一个文本框和一个搜索按钮 当我在文本框中输入数字并单击搜索按钮时 它需要将输入的值传递到下一个活动 在下一个活动中使用该值来获取值来自数据库 我正在使用以下代码来传递值 search button setCl
  • 字段“$name”必须是累加器对象

    我有一个疑问 当我使用 group https docs mongodb com manual reference operator aggregation group 错误显示 字段 name 必须是累加器对象 如果删除提交的 name
  • RESTful 服务:WCF 与 ASP.NET MVC

    实现 RESTful 服务的一种非常常见的方法是利用 ASP NET MVC 通过 WCF 来实现 ASP NET MVC 通过灵活的 URL 路由和灵活的 HTTP 方法映射到控制器操作 具有出色的 RESTful 支持 WCF 4 0
  • 如何将 Pigz 与 Tar 一起使用

    所以我在 tar 中使用 Pigz tar use compress program pigz 这可行 但它没有使用我的所有处理器 我想确保它是递归的 r 并使用 9 压缩级别 我通读了利用多核进行tar gzip bzip压缩 解压 ht
  • 使用 git 进行贡献

    所以我在github上克隆了一个项目并修复了补丁 因为这是我第一次使用 git 工作 所以我试图找出将其放到网上的最佳方法 在 github 上查看我自己的 克隆的 存储库后 发现只有一个分支 master 我创建了一个分支 myfix 现
  • 如何使用 Bash 伪造 DHCP 发现数据包?

    我想通过网络 LAN 发送经典DHCP 发现使用命令行打包 以便触发来自任何DHCP服务器监听 所以我可以用类似的东西捕获它 假设我的IP地址是192 168 0 30 tcpdump i eth0 host 192 168 0 30 n
  • 在 `aws cloudformation deploy --parameter-overrides` 中,如何将多个值传递给 `List` 参数?

    我在用这个 CloudFormation 模板 https docs aws amazon com AWSCloudFormation latest UserGuide example templates autoscaling html
  • 类型“未定义”不可分配给类型“从不”

    interface A name string age number var a A name age 23 var result A Object keys a as Array
  • 总结 sf::st_intersection() 中几何图形重叠的属性

    我想总结一组几何图形的属性 对它们重叠的值进行求和 library devtools install github r spatial sf library sf m rbind c 0 0 c 1 0 c 1 1 c 0 1 c 0 0
  • 如何查看Tortoise HG发出的Mercurial命令?

    我有办法查看 Tortoise HG 发出了哪些 Mercurial 命令吗 例如 如果我在 Tortoise 中使用 Shelve 命令 我想看看它如何 以及是否 在幕后调用 hg shelve 在某些工具中 有一个 查看 gt 始终显示
  • GCP 实例可以使用单个网络接口的最大带宽是多少?

    我正在使用 n 个并行进程将数据上传到 Google 云存储桶 出口数据速率约为 16Gbps 仅使用 n 个进程并行从 gcp 存储桶下载数据时 入口流量约为 26Gbps 但是当我使用相同的编号同时执行上传和下载时 的进程 入口速率降低
  • Java 方法引用具有泛型参数的方法

    我正在尝试对具有在类声明中指定的通用参数的方法进行方法引用 所以我有 public interface IExecutable p void execute P parameter public class Parameter implem
  • Android - 在运行时更改片段布局

    我想在我的应用程序中实现单活动多片段设计 我计划有几个 屏幕 片段的布局 我将在代码中切换 可能添加到后台堆栈 据我了解 每个屏幕中片段的布局是使用布局对象 例如 FrameLayout 设置的 该对象充当片段的占位符 共享相同的 ID 由
  • Spring 拦截 url 模式

    Spring Security 拦截 url 模式与 path 或 path 有什么区别 我见过一些具有以下内容的 Spring 安全配置 但我不明白 与 The vs 现在框架中很常见 通常称为Apache Ant Pathing或类似的
  • 指针、引用和常量引用参数的函数调用歧义

    我想做的是 允许使用 setter 函数传递指针 引用或常量引用 class A std string p std string st public A p 0 A setS const std string s std cout lt l