问题标签 [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++ - 非平凡的右值和左值示例
我不确定一些右值/左值非平凡的例子。
和表达式低于左值还是右值std::vector<int>({1,2,3})[0]
?std::vector<int>()
该代码没有实际用途,但令我惊讶的是该代码是有效的。看起来它们都是左值。或不?
进一步的例子...
下面的std::vector<int>()
表达式是一个右值。正确的?以及如何表达std::vector<int>({1,2,3})[0]
?
向量对象 fromstd::vector<int>()
和 int 值 from...[0]
都是临时值。正确的?
c++ - 使用 *this 从右值进行的预期无效初始化
在 C++ 中,不可能将 r 值参数绑定到非const
l 值引用。但我注意到,当我调用 r-value 对象时,返回*this
它的方法会以某种方式编译。
示例:不经意间,这段代码将无法编译
但是添加一个简单的方法X
使其可编译:
为什么它有效?是不是说调用后右foo
值对象就变成左值对象了?使用这种结构是否安全?有没有其他方法可以在不创建新方法(类似X.this
)的情况下达到类似的效果?
c++ - std::string 的右值和左值
我运行如图所示的代码,我对为什么 a+b 是右值感到困惑。据我所知,右值应该只有一个数据或地址,在这种情况下 std::string 应该是一个左值,不是吗?
输出
c++ - 结构化绑定是否应从 C++20 中的函数作为右值返回?
考虑一个 C++20 程序,其中函数foo
中有一个结构化绑定auto [y]
。该函数返回y
,它被转换为类型的对象A
。A
可以从 const 引用或 rvalue-reference 构造。
应根据 C++20 语言标准选择哪一个构造函数?
Clang 选择A(const int &)
和 GCC 选择A(int &&)
,演示:https ://gcc.godbolt.org/z/5q779vE6T
其中一个编译器是否不支持这方面的标准?
c++ - 右值来自哪里?
我学习了引用和值类别,因为后者在一些 C++ 错误中被提及。
我有一个函数,referenceToDouble
它接受对双精度的引用。通过观看有关值类别的视频left
,我相信right
以下是对 double 的左值引用。
在main
我制作变量a
和b
类型double
时,我没有收到错误。下面的代码显示a
和b
类型float
,这给了我一个错误。
当我将a
和的数据类型切换b
为 时float
,出现此错误。
我的问题是:
右值来自哪里?
是否有一个临时变量包含 从中转换的
double
值?这是暂时的吗?a
float
rvalue
或者错误是指
55.5
which 是文字,因此是右值?这里不涉及返回类型吗?我认为这不是因为这是按值返回而不是按引用返回。
我尝试阅读有类似错误的这个问题的答案,但我无法消除我的疑虑。我也认为我知道解决方案(使用double
)是什么,但我试图了解引擎盖下发生了什么。
c - 为什么我们在将变量传递给scanf时需要地址运算符(&符号,&),但在分配给它时不需要?
使用scanf
函数时,不能简单地指定变量名。相反,我们必须在变量名称前加上一个 & 符号,例如int a; printf("enter your value"); scanf("%d", &a);
.
我检查了在线资源寻找原因。他们中的大多数人会说:
我们需要修改该变量中的值。我们添加
&
以表示内存位置,以便可以更改该位置的值。函数的参数
scanf()
具有指针类型:需要给它一个内存地址,以便它可以更改变量的值。
我是编码新手,所以我对此有点困惑。如果我们需要地址来修改内存包含的内容,为什么我们&
在分配给变量时不使用,例如int a; a = 5;
?在此示例中,我们还修改了该值。为什么我们不这样写:int a; &a = 5;
?