”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么 Visual Studio 2010 允许非常量引用绑定到右值?

为什么 Visual Studio 2010 允许非常量引用绑定到右值?

发布于2024-11-04
浏览:170

Why Does Visual Studio 2010 Allow Non-Const Reference Binding to Rvalues?

允许非常量引用绑定到右值:VS2010 异常

C 标准严格禁止将非常量引用绑定到右值。然而,在一个特殊的异常情况下,Visual Studio 2010 (SP1) 编译以下代码时没有任何错误或警告:

string foo() { return "hello"; }
int main() {
    string& tem = foo(); // Non-const reference to rvalue
}

编译器行为差异

相比之下,其他编译器表现出更严格的行为:

  • GCC 发出编译错误,正确识别非法将非常量引用绑定到右值。
  • Visual Studio 2008 提供编译警告,承认潜在问题,但允许编译继续。

VS2010 异常解释

VS2010 中的这种异常行为源于已知的编译器扩展。与 GCC 和 Visual Studio 2008 不同,VS2010 在某些情况下允许将非常量引用绑定到右值,例如当右值由返回临时对象的函数生成时。

虽然此扩展违反了标准,它可能是为了方便而实施的。但是,如果在绑定引用后修改右值,则可能会导致未定义的行为。

后果和建议

此扩展可能会在依赖于该扩展的代码中引入微妙的错误正确遵守 C 标准。因此,强烈建议避免将非常量引用绑定到右值,即使在 VS2010 中也是如此。相反,按照标准的预期,在绑定到右值时始终使用 const 引用。

最新教程 更多>
  • SQL Server中如何使用递归查询分组匹配产品?
    SQL Server中如何使用递归查询分组匹配产品?
    sql Server:用于对匹配的产品进行分组的递归查询在名为“匹配”,每个记录中表示两个产品之间的匹配。目标是创建一个“组”表,以层次结构捕获这些匹配。具体来说,“ group_id”列应将最小产品ID存储在属于同一组的产品之间。为此完成此操作,我们可以利用SQL中的递归查询的功能。递归查询在...
    编程 发布于2025-04-19
  • 动态传递用户名创建SQL登录方法
    动态传递用户名创建SQL登录方法
    Creating Logins with Dynamic Parameters: Overcoming the "@parameter as username" ObstacleIn the pursuit of creating custom Stored Procedures...
    编程 发布于2025-04-19
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-04-19
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-04-19
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-19
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-04-19
  • Flatten与Ravel:NumPy函数选择指南
    Flatten与Ravel:NumPy函数选择指南
    了解Numpy的Flatten和Ravel functions Numpy库提供两种方法,Flatten and ravel,以将多维数组转换为一维数组。但是,出现了一个问题:为什么要执行相同任务的两个不同的函数?相同的输出,不同的行为 打印(y.ravel()) [1 2 3 4 5 6 7 ...
    编程 发布于2025-04-19
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-19
  • 在Android应用中如何使用广播接收器可靠地检测网络连接变化?
    在Android应用中如何使用广播接收器可靠地检测网络连接变化?
    广播接收器,以检查Android应用中的Internet连接 问题:重复广播接收机调用所遇到的常见挑战是接收器被称为两次,即使网络可能不可接受。这可以归因于在接收器的清单声明中添加多个意图过滤器。要解决此问题,仅使用一个动作进行网络连接性更改就足够了,例如: 检查Internet a...
    编程 发布于2025-04-19
  • MySQL字段值条件连接方法
    MySQL字段值条件连接方法
    mySQL有条件加入Query Quary cupareization ,可以根据指示表的字段的字段的值执行连接的值。 While switch-case statements cannot be directly employed in SQL queries, there are alter...
    编程 发布于2025-04-19
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:((-215)!empty()in Function Multultiscale中的“ openCV 要解决此问题,必须确保提供给HAAR CASCADE XML文件的路径有效。在提供的代码片段中,级联分类器装有硬编码路径,这可能对您的系统不准确。相反,OPENCV提...
    编程 发布于2025-04-19
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-04-19
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-04-19
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-04-19
  • 参数嗅探如何影响SQL存储过程性能及优化方法
    参数嗅探如何影响SQL存储过程性能及优化方法
    sql存储过程执行计划优化:参数嗅探及其影响及其影响考虑以下存储过程: 在提到的情况下,即使使用的值为null,也为@MyDate生成的执行计划也很差。此行为是不寻常的,并且暗示了参数嗅探的问题。 solufce:禁用参数sniffing 一个解决方案是通过使用参数变量来禁用参数sniffin...
    编程 发布于2025-04-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3