- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于这个问题的广泛性,我很抱歉,只是所有这些细节都是紧密相关的..
我一直在努力理解具体两个值类别(xvalues 和 prvalues)之间的区别,但我仍然感到困惑。
无论如何,我试图为自己建立的关于“身份”概念的心智模型是,应该保证拥有它的表达式驻留在实际程序的数据内存中。
正因如此,字符串字面量是左值,它们保证在整个程序运行期间驻留在内存中,而数字字面量是纯右值,例如假设存储在直接 asm 中。
这似乎也适用于纯右值文字中的 std::move
,即当调用 fun(1)
时,我们只会获得被调用方帧中的参数左值,但是当调用 fun(std::move(1))
时,glvalue 的 xvalue 'kind' 必须保存在调用者框架中。
然而,这种心智模型至少不适用于临时对象,据我所知,临时对象应该始终在实际内存中创建(例如,如果一个右值引用函数被称为 fun(MyClass ())
带有纯右值参数)。所以我猜这个心智模型是错误的。
那么思考 xvalues 的“身份”属性的正确方法是什么?我已经读过,通过身份我可以比较地址,但是如果我可以比较 2 个 MyClass().member
的地址(根据 cppreference 的 xvalue),假设通过右值引用将它们传递给一些比较函数,那么我不明白为什么我不能用 2 个 MyClass()
s (prvalue) 做同样的事情?
与此相关的另一个来源是此处的答案: What are move semantics?
Note that even though std::move(a) is an rvalue, its evaluation does not create a temporary object. This conundrum forced the committee to introduce a third value category. Something that can be bound to an rvalue reference, even though it is not an rvalue in the traditional sense, is called an xvalue (eXpiring value).
但这似乎与“可以比较地址”无关,并且 a) 我看不出这与右值的“传统意义”有何不同; b) 我不明白为什么这样的原因需要语言中的新值类别(好吧,好吧,这允许为 OO 意义上的对象提供动态类型,但 xvalues 不仅仅指对象)。
最佳答案
我个人有另一种心智模型,它不直接处理身份和内存等等。
prvalue
来自“pure rvalue”,而 xvalue
来自“expiring value”,这是我在心智模型中使用的信息:
纯右值指的是“纯粹意义上”的临时对象:编译器可以绝对确定地判断其求值是一个具有以下临时性的对象的表达式刚刚创建并且即将过期(除非我们通过引用绑定(bind)进行干预以延长其生命周期)。该对象是在表达式求值期间创建的,它将根据“母表达式”的规则消亡。
相比之下,过期值 是一个表达式,其计算结果为对 promise 即将过期的对象的引用。那就是它给了你一个 promise ,你可以对这个对象做任何你想做的事,因为无论如何它接下来都会被销毁。但是你不知道这个对象是什么时候创建的,或者它应该在什么时候被销毁。你只知道你“拦截”了它,因为它快要死了。
实践中:
struct X;
auto foo() -> X;
X x = foo();
^~~~~
在此示例中,计算 foo()
将产生一个 prvalue
。只要查看这个表达式,您就会知道这个对象是作为 foo
返回的一部分创建的,并将在这个完整表达式的末尾被销毁。因为您知道所有这些事情,所以您可以开启它的生命周期:
const X& rx = foo();
现在 foo 返回的对象的生命周期延长到 rx
auto bar() -> X&&
X x = bar();
^~~~
在此示例中,计算 bar()
将产生一个 xvalue
。 bar
向您保证 给您一个即将过期的对象,但您不知道这个对象是什么时候创建的。它可以在调用 bar
之前创建(无论是否是临时的),然后 bar
为您提供对它的 rvalue reference
。优点是你知道你可以用它做任何你想做的事,因为它不会在后记中使用(例如,你可以从它移动)。但是你不知道这个对象什么时候应该被销毁。因此你不能延长它的生命周期——因为你一开始就不知道它原来的生命周期是多少:
const X& rx = bar();
这不会延长生命周期。
关于c++ - xvalues 与 prvalues : what does identity property add,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45317763/
使用新版本的 VS 2013 RTM 和 asp.net mvc 5.0,我决定尝试一些东西... 不用说,发生了很多变化。例如,新的 ASP.NET Identity 取代了旧的 Membershi
请参阅下面的代码: var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model
我对 asp.net 核心标识中的三个包感到困惑。我不知道彼此之间有什么区别。还有哪些是我们应该使用的? 我在 GitHub 上找到了这个链接,但我没有找到。 Difference between M
Visual Studio-为AspNet Identity 生成一堆代码,即LoginController 和ManageController。在 ManageController 中有以下代码:
我是 SwiftUI 的新手,在连续显示警报时遇到问题。 .alert(item:content:) 的描述修饰符在它的定义中写了这个: /// Presents an alert. ///
我有一个 scalaz Disjunction,其类型与 Disjunction[String, String] 相同,我只想获取值,无论它是什么。因此,我使用了 myDisjunction.fold
我有一个 ASP.NET MVC 应用程序,我正在使用 ASP.NET Identity 2。我遇到了一个奇怪的问题。 ApplicationUser.GenerateUserIdentityAsyn
安全戳是根据用户的用户名和密码生成的随机值。 在一系列方法调用之后,我将安全标记的来源追溯到 SecurityStamp。 Microsoft.AspNet.Identity.EntityFramew
我知道 Scope_Identity()、Identity()、@@Identity 和 Ident_Current() 全部获取身份列的值,但我很想知道其中的区别。 我遇到的部分争议是,应用于上述这
我正在使用 ASP.NET 5 beta 8 和 Identity Server 3 以及 AspNet Identity 用户服务实现。默认情况下,AspNet Identity 提供名为 AspN
我想在identity 用户中上传头像,并在账户管理中更新。如果有任何关于 asp.net core 的好例子的帖子,请给我链接。 最佳答案 我自己用 FileForm 方法完成的。首先,您必须在用户
在 ASP.NET 5 中,假设我有以下 Controller : [Route("api/[controller]")] [Authorize(Roles = "Super")] public cl
集成外部提供商(即Google与Thinktecture Identity Server v3)时出现问题。出现以下错误:“客户端应用程序未知或未获得授权。” 是否有人对此错误有任何想法。 最佳答案
我有一个 ASP.NET MVC 5 项目( Razor 引擎),它具有带有个人用户帐户的 Identity 2.0。我正在使用 Visual Studio Professional 2013 我还没
我配置IdentityServer4使用 AspNet Identity (.net core 3.0) 以允许用户进行身份验证(登录名/密码)。 我的第三个应用程序是 .net core 3.0 中
我创建了一个全新的 Web 应用程序,比如“WebApplication1” - 身份验证设置为个人用户帐户的 WebForms。我不会在自动生成的代码模板中添加一行代码。我运行应用程序并注册用户“U
是否可以为“系统”ASP.NET Identity v1 错误消息提供本地化字符串,例如“名称 XYZ 已被占用”或“用户名 XYZ 无效,可以只包含字母或数字”? 最佳答案 对于 ASP.NET C
我对 Windows Identity Foundation (WIF) 进行了非常简短的了解,在我看来,我的网站将接受来自其他网站的登录。例如任何拥有 Gmail 或 LiveID 帐户的人都可以在
我需要向 IS 添加自定义权限和角色。此处提供用例 http://venurakahawala.blogspot.in/search/label/custom%20permissions .如何实现这
我有许多使用 .NET 成员身份和表单例份验证的旧版 .NET Framework Web 应用程序。他们每个人都有自己的登录页面,但都在同一个域中(例如.mycompany.com),共享一个 AS
我是一名优秀的程序员,十分优秀!