右值到左值转换 Visual Studio

2024-03-29

在 Visual Studio 2012RC 中存在一些非标准扩展。例如这段代码编译:

#include <string>

using namespace std;

void value(string& value)
{
    value = "some";
}

int main()
{
    value(string("nice"));
}

并收到警告说它是非标准扩展。所以,我想了解它是如何真实的以及代码如何转换(右值引用或带有 const_cast 的 const 引用)?


类类型的临时对象仍然是一个对象。它位于内存中的某个位置,这意味着编译器能够附加对它的引用并没有什么异常。在物理层面,无论是 const 引用还是非 const 引用都没有区别。换句话说,在这种情况下,语言限制纯粹是概念上的、人为的。编译器只是忽略该限制。这里没有必要“改变”任何东西。引用只是直接附加到对象,无论该对象位于何处。

基本上,对于一个为外部词提供访问其值的类this指针(或使用左值访问*this)可以立即轻松地模拟行为

struct S {
  S& get_lvalue() { return *this; }
};

void foo(S& s);
...

foo(S().get_lvalue());

上面的代码是完全合法的,并且它可以绕过上述限制。您可以将 MSVC++ 行为视为与此等效。

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

右值到左值转换 Visual Studio 的相关文章

随机推荐

  • Proguard 设置不删除未使用的方法

    考虑下面的 android 代码结构 package blah class A class B public void foo String s 我如何告诉 proguard 不要删除或混淆 foo foo 是编译时代码中未使用的函数 但在
  • 如何将之前的时间戳保存到 Firebase FireStore

    我想将旧数据从不同系统迁移到 firestore 下面的命令保存当前时间戳 firebase firestore FieldValue serverTimestamp 我想存储旧的值 有什么办法可用吗 firebase firestore
  • LSH 是将向量转换为汉明距离的二进制向量吗?

    我读了一些关于 LSH 的论文 我知道它用于解决近似 k NN 问题 我们可以将算法分为两部分 给定一个向量D尺寸 其中D是大 的任何值 用一组翻译它N where N lt
  • 具有相同范围和离线 access_type 的第二次授权具有意外的权限对话框

    如果我在身份验证 URL 中指定 access type offline 并且用户尝试第二次身份验证 我会收到一个框 显示正在请求离线访问 我本以为它已经被授权 所以不需要额外的权限 有任何想法吗 Edit 更多信息 第一次它没有提到用户需
  • 如何在等高线图上绘制具有条件的数组?

    我使用下面的代码绘制了 GPP 的全球地图 lon 和 lat 都是 netCDF4 属性 形状分别为 144 和 90 而 gpp avg 是一个 numpy 数组 形状为 90 144 import numpy as np import
  • 如何:使用 maven2 进行数据库版本控制?

    我正在寻找任何用于版本控制数据库更改的 Maven 插件 有一些插件为此任务提供一些支持 Maven LiquiBase 插件 http www liquibase org manual maven Maven 数据库迁移插件 http c
  • .Rmd 文件打开时完全是空的

    在 RStudio 3 3 2 中打开 rmd 文件时 它们显示为完全空的 如果我使用记事本打开或在另一台计算机上打开 则会有文本 到底是怎么回事 有问题的 RMD 文件 https drive google com open id 0B
  • iOS - 恢复自动续订订阅

    我正在实施自动更新订阅 我有以下问题 订阅内容过期后 用户还能恢复吗 如果是这样 我如何验证它们并让它们下载 Look at 恢复自动续订订阅 https developer apple com library ios documentat
  • 模板类中的模板函数

    我有这个代码 template
  • 继续断言测试用例

    上次我使用 testcafe 时 我意识到这个伟大框架中缺少我的功能 该功能类似于 尽管出现了断言 但仍继续执行特定测试的其余部分 更准确地说 我描述了我缺少此类功能的原因 假设您正在测试 Web 应用程序 例如要在其中输入合同日期的 We
  • 正则表达式 - 时间验证 ((h)h:mm)

    d 1 2 0 5 0 9 是我所拥有的 这将分钟限制为 00 59 然而 它并不将时间限制在 0 到 12 之间 为了相似性和统一性 如果可能的话 我想单独使用 RegEx 来完成此操作 此外 我希望第一个数字是可选的 即接受 09 30
  • 如何在单独的dll项目中配置WCF

    我正在开发一个 Web 应用程序 ASP NET 3 5 它将使用许多 Web 服务 我为每个 Web 服务创建了一个单独的 dll 项目 这些项目包含服务引用和客户端代码 但是 调用网站必须具有
  • 检查字符串是否包含日文/中文字符

    我需要一种方法来检查字符串是否包含Japanese or Chinese text 目前我正在使用这个 string match u3400 u9FBF 但它不适用于以下示例 or 你能帮我吗 Thanks 通常用于中文和日文文本的 Uni
  • redirect_uri 的参数值无效

    当我尝试通过网络在 Google Plus 中验证我的应用程序时 出现错误 错误 无效 请求 redirect uri 的参数值无效 缺少权限 MY APP oauth2callback 我按照说明做了一切 https developers
  • 如何 git svn 仅获取具有特定模式的分支/标签?

    我想使用 git svn 查看 Boost 库 并且只想查看从版本 1 35 开始的主干和标签 即 tags release Boost 1 35 及更高版本 我的配置如下 svn remote svn ignore paths tags
  • MonoTouch.Dialog:UISearchBar 颜色

    在 3 月 31 日发布的 MonoTouch Dialog 中 我们无法设置UISearchBar现在不再这样了 因为有一个带有硬编码颜色的新容器对象 有没有更简单的方法来改变颜色UISearchBar 作为解决方法 我使用它 知道 UI
  • 无法更改样式:使用 getelementsbyclassname 显示

    document getElementByClassName xyz style display none 我无法隐藏课程内容 document getElementsByClassName返回一个类似数组的对象 您可以为此使用以下脚本 d
  • 如何减少Flutter的build_runner构建时间

    我的项目变得非常大 每次运行 build runner 都会花费太多时间来构建 我减少构建时间的想法是仅构建实际需要构建的文件 这些文件是我当前功能目录的文件 有没有办法只为单个文件夹或单个文件运行 build runner 您可以在 bu
  • Android 中的语音通话录音应用

    我想做一个录音通话的应用程序 可以吗 我期待 Android 领域经验丰富的人提供一些适当的指导 我在android中看到了android media MediaRecorder类 我需要使用那个类吗 感谢致敬 帕瓦蒂 卡玛隆 抱歉 开发人
  • 右值到左值转换 Visual Studio

    在 Visual Studio 2012RC 中存在一些非标准扩展 例如这段代码编译 include