问题标签 [lvalue-to-rvalue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
130 浏览

c++ - Lvalue to rvalue conversion with integer pointer

If I read implicit conversions correctly:

Lvalue to rvalue conversion

A glvalue of any non-function, non-array type T can be implicitly converted to a prvalue of the same type. [..]

Unless encountered in unevaluated context (in an operand of sizeof, typeid, noexcept, or decltype), this conversion effectively copy-constructs a temporary object of type T using the original glvalue as the constructor argument, and that temporary object is returned as a prvalue.

Then why does this not work?

The type int* should have been implicitly converted to a prvalue of the same type via a temporary - thus binding to the rvalue reference without issues.

0 投票
3 回答
135 浏览

c++ - 赋值的右操作数是否总是转换为右值?

我想澄清一下这个特殊情况:

"a" 是一个左值,但它现在是赋值的右手操作数。这是否意味着它被转换为右值?

此代码无法编译:

但是这个可以:

由于左值引用不能绑定到右值,这是否意味着这里没有发生转换?如果是这种情况,什么时候会发生隐式左值到右值的转换?(除了具有原始类型的 operator+ 的情况)

0 投票
2 回答
192 浏览

c++ - 未执行左值到右值转换

以下函数返回一个右值

Clang 的AST 也显示了转换


下面还执行左值到右值的转换,这次是参数进入函数。

AST包括转换


据我了解,以同样的方式,以下内容也应该需要左值到右值的转换。

但它从未出现在 AST 中


为什么?转换有时是可选的吗?

0 投票
1 回答
508 浏览

c++ - 为什么非 const 引用必须用左值初始化?

这是导致 C2664 错误的代码片段:

无法将参数 1 从 'std::unique_ptr<Component,std::default_delete<_Ty>>' 转换为 'ComPtr &'

那么为什么非 const 引用必须用左值初始化呢?除了声明一个新变量外,如何避免这种情况?

0 投票
2 回答
618 浏览

c++ - 错误:'std::function 类型的非常量引用的初始化无效&' 来自 'main():: 类型的右值'|

编辑:对不起,我在没有了解参考资料的情况下问了这个问题......

当我运行这段代码时,我似乎收到了这个错误......

错误:从“main()::”类型的右值对“std::function&”类型的非常量引用无效初始化

但是,当我添加一个before 函数时,错误消失了......就像这样:const

问题是我想在需要时更改函数引用中的函数......还有其他方法可以做到这一点吗?请让我知道它是否确实存在。

再见,

塞缪尔

0 投票
1 回答
86 浏览

c++ - 为什么 gcc 6.4.0 c++14 会自动将左值移动到右值

我遇到了 gcc 编译器将局部变量(不是临时的)作为右值参数移动到函数的问题。我有一个简单的例子:

输出:

我没想到它,因为移动赋值将右值归零。在我的情况下,它导致崩溃,因为在 b1=b2; 之后使用了 b2;

问题是为什么会发生。

0 投票
1 回答
122 浏览

c++ - 如何使用转发将右值转换为左值引用?

当我不关心返回的 int 数据时,我正在尝试使用重载函数来隐藏将 int 引用传递给实用函数。为什么我需要使用它T&而不是T作为模板参数?为什么我需要定义i为右值的中间函数?

0 投票
1 回答
905 浏览

c11 - atomic_load() 和 assignment 有什么区别?

我正在从事一个处理大量原子操作的项目。直到现在我还不知道atomic_load()并且只依靠赋值运算符来获取原子类型的值,除了这么多的测试,我还没有看到错误。这些原子类型也被多个进程和线程更改atomic_compare_exchange_strong_explicit(),因此它们每次都需要一个旧值,这就是我一直这样做的地方oldValue = <Atomic_ type_variable>,它总是可以正常工作。这只是偶然吗?我应该更喜欢使用 atomic_load() 吗?

0 投票
2 回答
119 浏览

c++ - 当函数接受右值引用时,函数中该变量的类型是什么?

这是一个术语问题。如果我有这个:

那么是什么类型v呢?如果您在谈论 call f0,您会说“f0接受右值引用”(对吗?)但在 内f0v不是右值引用,否则std::move不需要?对?但是static_assert表明它是一个右值,对吧?

相似地:

本地右值引用的行为方式相同:

描述类型的正确术语是v什么?说f0接受右值引用是否正确?如果v是右值引用,那么用什么术语说右值引用不能用于调用采用右值引用的函数?

0 投票
2 回答
111 浏览

c++ - 当 std::move 从返回的值引用时 auto 的安全性

我需要一些关于何时分配或列出初始化auto类型命名变量的保证,

  • A a std::move()ed 返回对变量的引用
  • B 对变量的返回引用

在表达式之后,原点超出范围,是 A 安全 / B 不安全。示例代码:

据我了解,表达式 B 生成赋值的左值权利,因此类型elementB是左值引用,也就是左值引用std::string&,因此不安全。

执行代码时“A:foo B:”的输出也表明了这一点。( https://ideone.com/wKKbdK ) 更新:对不起,我忘了我移动了它,所以我改变了顺序,现在输出是例外,对不起。

然而,我不确定的更麻烦的事情是表达式 A:在std::move我假设我得到一个 xvalue 之后,它既是右值又是左值,所以我不确定对于elementA.

因为从左值我几乎可以确定它的 UB,而左值是左值,而 xvalue 是其中的一部分,那么类型将elementAstd::string&&,这不安全吗?(除非 const&& AFAIK 例外)

所以总结一下:elementA 的使用是安全的标准化行为吗?它的类型是什么?