问题标签 [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.
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.
c++ - 赋值的右操作数是否总是转换为右值?
我想澄清一下这个特殊情况:
"a" 是一个左值,但它现在是赋值的右手操作数。这是否意味着它被转换为右值?
此代码无法编译:
但是这个可以:
由于左值引用不能绑定到右值,这是否意味着这里没有发生转换?如果是这种情况,什么时候会发生隐式左值到右值的转换?(除了具有原始类型的 operator+ 的情况)
c++ - 未执行左值到右值转换
以下函数返回一个右值:
Clang 的AST 也显示了转换:
下面还执行左值到右值的转换,这次是参数进入函数。
AST包括转换:
据我了解,以同样的方式,以下内容也应该需要左值到右值的转换。
但它从未出现在 AST 中:
为什么?转换有时是可选的吗?
c++ - 为什么非 const 引用必须用左值初始化?
这是导致 C2664 错误的代码片段:
无法将参数 1 从 'std::unique_ptr<Component,std::default_delete<_Ty>>' 转换为 'ComPtr &'
那么为什么非 const 引用必须用左值初始化呢?除了声明一个新变量外,如何避免这种情况?
c++ - 错误:'std::function 类型的非常量引用的初始化无效&' 来自 'main():: 类型的右值'|
编辑:对不起,我在没有了解参考资料的情况下问了这个问题......
当我运行这段代码时,我似乎收到了这个错误......
错误:从“main()::”类型的右值对“std::function&”类型的非常量引用无效初始化
但是,当我添加一个before 函数时,错误消失了......就像这样:const
问题是我想在需要时更改函数引用中的函数......还有其他方法可以做到这一点吗?请让我知道它是否确实存在。
再见,
塞缪尔
c++ - 为什么 gcc 6.4.0 c++14 会自动将左值移动到右值
我遇到了 gcc 编译器将局部变量(不是临时的)作为右值参数移动到函数的问题。我有一个简单的例子:
输出:
我没想到它,因为移动赋值将右值归零。在我的情况下,它导致崩溃,因为在 b1=b2; 之后使用了 b2;
问题是为什么会发生。
c++ - 如何使用转发将右值转换为左值引用?
当我不关心返回的 int 数据时,我正在尝试使用重载函数来隐藏将 int 引用传递给实用函数。为什么我需要使用它T&
而不是T
作为模板参数?为什么我需要定义i
为右值的中间函数?
c11 - atomic_load() 和 assignment 有什么区别?
我正在从事一个处理大量原子操作的项目。直到现在我还不知道atomic_load()
并且只依靠赋值运算符来获取原子类型的值,除了这么多的测试,我还没有看到错误。这些原子类型也被多个进程和线程更改atomic_compare_exchange_strong_explicit()
,因此它们每次都需要一个旧值,这就是我一直这样做的地方oldValue = <Atomic_ type_variable>
,它总是可以正常工作。这只是偶然吗?我应该更喜欢使用 atomic_load() 吗?
c++ - 当函数接受右值引用时,函数中该变量的类型是什么?
这是一个术语问题。如果我有这个:
那么是什么类型v
呢?如果您在谈论 call f0
,您会说“f0
接受右值引用”(对吗?)但在 内f0
,v
不是右值引用,否则std::move
不需要?对?但是static_assert
表明它是一个右值,对吧?
相似地:
本地右值引用的行为方式相同:
描述类型的正确术语是v
什么?说f0
接受右值引用是否正确?如果v
是右值引用,那么用什么术语说右值引用不能用于调用采用右值引用的函数?
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 是其中的一部分,那么类型将elementA
是std::string&&
,这不安全吗?(除非 const&& AFAIK 例外)
所以总结一下:elementA 的使用是安全的标准化行为吗?它的类型是什么?