为什么 Visual Studio 在自分配时不发出警告 (int foo = foo;)

2023-11-25

我正在重构一个出现了无数次的术语,不小心产生了如下代码所示的情况:

#include "stdafx.h"
#include <iostream>

int foo = foo;

//By replacing with the following instruction we causes a compile error
//int foo(foo);

int _tmain(int argc, _TCHAR* argv[])
{
    int bar = bar;
    std::cout << "Well this is awkward " << foo << std::endl;
    return 0;
}

对于不同的调试和发布配置,编译器对此保持沉默int foo = foo;.

我看不出该语句不是等待发生的错误的情况。 Visual Studio 编译器不应该发出警告吗?

我并不是假装这是一种未定义的行为。我的意思是,默认情况下,将变量赋值给自身可能是程序员的错误。除非有人对赋值运算符的使用有一个奇怪的方案。


类似的问题(i=i++) 确实是未定义的行为,但这主要是因为该指令包含对同一变量的两次赋值:

  • 的递增i (i++),这是在某个时刻完成的after指令i++回报i

  • 的分配i

问题是我们无法真正知道分配i发生在递增之前或之后,因此是未定义的行为。

在你的例子中,foo=foo,我们先进行读取,然后进行写入。毫无疑问,我们必须在写入之前读取该值,因此很容易定义。

附带说明的是,如果operator=被重新定义,那么foo=foo可以做很多事情,而不仅仅是 foo 本身的复制。 C++ 有目的地允许您以多种不同的方式向食物中开枪。但无论如何,C++ 编译器都不是主动发出警告/错误的黄金标准。

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

为什么 Visual Studio 在自分配时不发出警告 (int foo = foo;) 的相关文章

  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 如何在GDB中重新运行程序多次?

    我有一个程序偶尔会失败 但出现相同的错误 为了调试它 我想在 GDB 下运行它 直到它失败 设置断点并重新运行它 我该怎么办 gdb args path to program
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • PyCharm - 如何挂起所有线程

    我们使用 PyCharm 5 0 1 进行多线程调试 当它在断点处停止时 只有特定线程停止 而所有其他线程继续 这使得 冻结时刻 和检查参数值以及其他线程的当前状态变得困难 当其中一个线程在断点处停止时 是否可以挂起所有线程 这在最新的 P
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • glut、glew dll:二进制文件不是使用调试信息构建的

    这是我得到的输出 abc exe Loaded C Windows system glut32 dll Binary was not built with debug information abc exe Loaded C Windows
  • 私有模板函数

    我有一堂课 C h class C private template
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大

随机推荐

  • 检查实例是否属于某种类型

    用它来检查是否c是一个实例TForm c GetType Name CompareTo TForm 0 除了使用之外 是否还有更类型安全的方法来做到这一点string作为参数CompareTo 这里的不同答案有两种不同的含义 如果你想检查一
  • 尝试从 Django 中的 POST 解析 `request.body` [重复]

    这个问题在这里已经有答案了 由于某种原因 我无法弄清楚为什么 Django 不处理我的request body内容正确 正在发送中JSON格式 并查看Network开发工具中的选项卡将其显示为请求负载 creator creatorname
  • 如何在字符串中使用反斜杠 (\)?

    我尝试了很多方法来获得单反斜杠从一个executed 我的意思不是来自的输入html 我可以得到特殊字符作为制表符 新行和许多其他内容 然后将它们转义为 t or n or someother character 但当 a 时我无法得到一个
  • 如何判断 Chrome 扩展是由真实用户安装还是由我在开发过程中安装?

    我在 Chrome 扩展程序中使用 Analytics 我只想在真人 不是我正在使用它时 使用扩展时才执行分析代码 以下任何一项是否可行 哪一项是最好的 确定扩展是打包安装还是解包安装 我认为这是最好的 因为解压显然意味着它 正在开发中 并
  • 值限制:类型“bar”已被推断为具有泛型类型

    在下面的代码片段中 我不明白为什么我必须撰写f and g方式函数foo可以以及为什么它不能按功能方式工作bar尝试去做 let f a b a b let g a a b a a let gt f1 f2 fun a b gt let x
  • 在类型 ' 上找不到带有类型 'string' 参数的索引签名

    我正在开发我的第一个 firebase typescript 函数项目 我有以下代码片段 const files status src api status f js invite src api invite f js user src
  • 如何将java序列化对象写入和读取到文件中

    我将把多个对象写入一个文件 然后在代码的另一部分检索它们 我的代码没有错误 但无法正常工作 您能帮我找出我的代码有什么问题吗 我从不同的网站阅读了不同的代码 但没有一个对我有用 这是我将对象写入文件的代码 MyClassList 是一个数组
  • 按下按钮时播放声音 - android

    我有这个代码 package com tct soundTouch import android app Activity import android media MediaPlayer import android os Bundle
  • 在 openSUSE 上安装最新的 Python

    我使用 Zypper 包管理器在 openSUSE 系统 参见下面的版本 上安装了 Python 这为我提供了 Python 3 2 但某些包需要 Python 3 3 更新为zypper update python3保留在 Python
  • Loaddata 未正确处理时间戳和时区

    我正在使用 django 1 4 1 并启用了 mysql 和时区 我将数据转储到 yaml 修改了一些字段以创建一些测试数据 并尝试将其重新加载 但是 即使指定了 tz Django 仍不断抱怨天真的日期时间 具体来说 我的负载数据有 f
  • 按频率对 SQL 查询记录进行排序

    有什么方法可以根据某个值在列中出现的频率来对从 SQL 查询中选择的记录进行排序吗 例如 如果有 5 个列 value1 的记录 3 个列 value2 的记录 以及 2 个列 value3 的记录 有没有办法让结果先显示 value1 然
  • mysql 仅替换某些字段

    我有一个 mysql 表 CREATE TABLE gfs localidad varchar 20 fecha datetime pp float 8 4 NOT NULL default 0 0000 temp float 8 4 NO
  • 获取特定区域的节点列表?

    我正在开发一款横向游戏 我需要知道某个区域中有哪些节点来实现 视线 之类的功能 现在我正在尝试使用 enumerateBodyiesInRect 但它检测到的主体距离评估的矩形 20px 或更多 我无法弄清楚为什么它如此不精确 这就是我现在
  • 如何在 php 中获取远程域的 HTTP 状态代码?

    我想创建一个批处理脚本 遍历数据库中的 20 000 个链接 并清除所有 404 等 如何获取远程 URL 的 HTTP 状态代码 最好不要使用curl 因为我没有安装它 CURL 会是完美的 但由于你没有它 你将不得不开始使用套接字 该技
  • R 中复杂的非等值合并

    我正在尝试在两个表之间进行复杂的非等值连接 我受到了上次 userR 2016 中的演示的启发 https channel9 msdn com events useR international R User conference useR
  • JavaScript 循环性能 - 为什么将迭代器递减到 0 比递增迭代器更快

    在他的书中更快的网站Steve Sounders 写道 提高循环性能的一个简单方法是将迭代器向 0 递减 而不是向总长度递增 实际上这一章是由 Nicholas C Zakas 撰写的 此更改可以使原始执行时间节省高达 50 具体取决于每次
  • git 不添加现有文件夹

    最近开始做一个项目 然后决定把它推到github上 所以我做了以下事情 cd
  • Angular 6 中的倒计时器

    您好 我正在尝试获取一个倒计时器的示例 我在堆栈上搜索时找到了这里 角度 2 倒计时 这是我的代码 import Component ElementRef OnInit OnDestroy from angular core import
  • XSLT:转换为非 xml 内容?

    是否可以使用 XSLT 将 XML 转换为 XML 以外的内容 例如我想要决赛non xml内容
  • 为什么 Visual Studio 在自分配时不发出警告 (int foo = foo;)

    我正在重构一个出现了无数次的术语 不小心产生了如下代码所示的情况 include stdafx h include