如果构造函数参数与 C++ 中的成员变量同名怎么办?

2023-11-22

首先是一些代码:

class CInner {
public:
    CInner( const CInner& another ) { //impl here }
private:
    // some member variables
}

class COuter {
public:
    COuter( const CInner& inner ) : inner( inner ) {}
private:
    CInner inner;
}

Yes, in COuter::COuter( const CInner& )参数与成员变量同名。

在 VC++ 中可行 - VC++ 认为只有使用参数初始化成员变量才是合理的,这就是发生的情况 -CInner::inner使用参数进行初始化。但是当用 GCC 编译它时,它会以另一种方式解释:GCC 初始化CInner::inner 与它自己所以它未被初始化。

哪个编译器是正确的?


它实际上并不是由某个特定的编译器决定什么是合理的,什么是不合理的。语言规范明确指出inner(inner)在构造函数初始值设定项中使用的第一个inner应该在类范围内查找(即解析为COuter::inner),而第二个inner应该在构造函数范围中查找(即解析为构造函数参数inner).

这就是您所描述的 VC++ 行为。然而,我发现很难相信 GCC 在这种情况下会表现不正确(除非你有一些奇怪的旧版本的 GCC)。你确定你没有以某种方式误解了 GCC 的行为吗?

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

如果构造函数参数与 C++ 中的成员变量同名怎么办? 的相关文章

随机推荐

  • BeginThread 结构 - Delphi

    我现在已经有了一个即将完成的应用程序 我想要实现的下一个功能是线程 我选择使用 BeginThread 尽管我知道 delphi 中的 TThread 我遇到的问题是 BeginThread 调用的结构 通常 程序中调用我想要线程化的函数的
  • 让 pygame 在 Macos 上显示除空白屏幕之外的任何内容时出现问题

    我最近买了一台新 MacBook 我一直在不断地尝试pygame去工作 但还没有成功 我变得非常绝望 我真的需要一些帮助 我已经安装了pygame 1 9 4即使我在运行时没有收到任何错误消息pygame代码 它不会向我显示任何内容 除了空
  • 动态数据透视表中的行和列总计

    在 SQL Server 2008 中 我有一个包含 3 列的表 tblStock 零件代码 NVARCHAR 50 库存数量 INT 位置 NVARCHAR 50 下面是一些示例数据 PartCode StockQty Location
  • 如何向 jQuery 点击函数发送多个参数?

    目前我正在使用类似的东西 myclass click function var msg this attr id alert msg 和 HTML lt a href class myclass id 101 gt Link 如果我需要其他
  • 方法集(指针与值接收器)

    我很难理解为什么这些规则与指针类型 vs 的方法集相关联 值类型 有人可以解释一下原因吗 从接口表的角度 摘自威廉 肯尼迪博客的片段 Values Methods Receivers T t T T t T and t T Methods
  • 如何仅更改 DOM 元素中的文本而不替换任何子元素

    嗨 我有一个简单的 html 结构 h1 Title text span inner text span h1 我想要的是仅替换文本 标题文本 而不打扰 span 文本 这可能吗 我不想添加任何其他 dom 元素 我想保留该结构 我当然一直
  • 为什么图形坐标是从左上角开始测量的?

    我注意到我使用过的每个计算机图形系统都使用左手坐标系 其原点位于左上角 Cairo Java Microsoft XYZ 和大多数图形程序都使用此系统 我认为它们都可以追溯到一个共同的祖先 但我找不到任何关于此的参考资料 如果我不得不猜测的
  • 有没有办法安装旧版本的Android平台工具?

    我下午一直在四处寻找 看看是否有任何方法可以安装旧版本的Android platform tools 我试过通过sdkmanager和较年长的android版本 但所有这些似乎总是链接到最新版本platform tools 我正在尝试这样做
  • pip 在 Mac OS X Mavericks (10.9) 上引发 stdio.h 未找到错误

    此时我已经尝试了无数的解决方案 但似乎没有任何效果 我正在尝试安装 mysql python 但是 numpy 和其他需要 gcc 的软件包也会发生这种情况 building mysql extension gcc 4 2 fno stri
  • 如何用java实现TCP服务器和TCP客户端传输文件

    我已经实现了简单的TCP服务器和TCP客户端类 它们可以将消息从客户端发送到服务器 并且消息将在服务器端转换为大写 但是如何实现从服务器传输文件到客户端以及从客户端上传文件到服务器 以下代码是我得到的 TCPClient java impo
  • 如何在 Word 中对 RMarkdown 文档中的标题进行正确编号

    我正在创建一个 RMarkdown 文档 希望使用 RStudio 将其导出到 MS Word 中 我想要一个目录和编号标题 这是我的示例 Markdown 文档 title Test author Ben date r format Sy
  • 如何在 Grails 中复制域对象?

    我想复制一个域对象 实现这一目标的最简单方法是什么 我意识到我可以创建一条新记录 然后迭代每个字段 逐个字段复制数据 但我认为必须有一种更简单的方法来做到这一点 在 Rails 中 有一个简单的方法可以做到这一点 rails lt 3 1
  • 在 MVC 中,部分视图会继承其父视图的模型吗?

    我正在将一些数据从我的控制器传递到视图 我希望将其显示在该视图内的部分视图中 不要问 这很复杂 我知道我可能甚至不应该将模型传递给另一个视图的视图 但我注意到部分视图实际上是从父视图继承模型 public ActionResult Inde
  • 从手机浏览器获取位置数据

    我正在开发一个网络应用程序 该应用程序会经常受到移动浏览器的攻击 我想知道是否有办法从浏览器请求中获取足够的信息来查找位置数据 三角测量或 GPS 当然 不是直接来自请求 一位同事建议 一些运营商在请求标头中提供唯一标识符 该标识符可以发送
  • 使用 ggplot2 重现以下基本图

    I d like to reproduce the following base graph with ggplot2 以下是R生成该图的代码 set seed 12345 Data lt matrix data rnorm n 30 me
  • 类型错误:Ajv 不是构造函数

    我有这个课程 我尝试实例化Ajv使用 new 关键字 我收到此错误 类型错误 Ajv 不是构造函数 Code import as Ajv from ajv export class ValidateJsonService validateJ
  • 解决 Looper.java 中的非空和非空符号的问题

    我正在开发一个 Android 应用程序 请帮助我解决依赖错误 package android os import android support annotation NonNull import android support anno
  • 限制CPU负载或设置进程优先级

    这不是我第一次从我的主机收到 CPU 负载过高的警告 该代码只是一些带有 mysql 查询的随机 php 脚本 没什么花哨的 这些表格没什么特别的 最多几百行 如果需要的话我总是限制它们 我不介意它运行 0 15 秒而不是 0 05 秒 那
  • WPF中如何直接在位图(BitmapSource、WriteableBitmap)上绘图?

    在 GDI Winforms 中我会这样做 Bitmap b new Bitmap 32 32 Graphics g Graphics FromImage b some graphics code 如何使用 DrawingContext 在
  • 如果构造函数参数与 C++ 中的成员变量同名怎么办?

    首先是一些代码 class CInner public CInner const CInner another impl here private some member variables class COuter public COut