lvalue-to-rvalue相关内容
TL;DR 给定以下代码: int* ptr;*ptr = 0; 在应用间接引用之前,*ptr 是否需要 lvalue-to-rvalue 的 ptr 转换? 该标准在很多地方涵盖了 lvalue-to-rvalue 的主题,但似乎没有指定足够的信息来确定 * 运算符 是否需要这种转换. 详情 左值到右值的转换见N3485 在 4.1 Lvalue-to-rvalue
..
这是一个术语问题.如果我有这个: #include void g(std::vector&& arg);void f0(std::vector&& v) {static_assert(std::is_same&&>::value);//看起来 v 是一个右值引用.static_assert(std::is_same&>::value);static_assert(std::i
..
我问了这个问题:常量变量的静态声明 并且显然归结为一个问题,为了比较的目的,浮点左值是否会转换为右值? 因此在此代码中,左值到 const float foo = 13.0F; static_assert(foo> 0.0F,“ foo必须大于0。”); 解决方案 是的,它已执行。基本上是因为 3.0> 1.2 是一个格式正确的表达式,除了操作数的prval
..
与此问题一个相关的问题。通过跟踪 slt_pair。 h 和移动。 h ,看来 Clang 和 G ++ 之间的区别是内部的。我尝试模拟对象(pair.first)的分配,与 std_pair.h 的实现相同,输出与 Clang #include 结构Foo { Foo(){ std :: cout
..
以下函数返回右值: int foo() { int x = 42; 返回x; // x转换为prvalue } Clang的 AST也显示了转化: `-FunctionDecl line:1:5 foo‘int()’ `-CompoundStmt | -DeclStmt
..
我假设当通用引用参数与右值引用参数匹配时,返回右值引用参数。但是,我的测试表明,通用引用函数模板将右值引用转换为左值引用。为什么会这样? #include #include 使用命名空间std; 模板 T f1(T& t){//
..
类测试{ public: int n1; }; 测试func(){ return Test(); } int main(){ func()= Test(); } 这对我来说没有意义。如何以及为什么允许这样做?它是未定义的行为吗?如果一个函数返回一个右值,那么如何将一个右值设置为另一个右值?如果我尝试使用任何原始类型进行此操作
..
为什么要编译此代码?我以为ctor返回的右值不在内存中,因此不能用作左值。 #include #include 类别Y { 公共: 明确Y(size_t num = 0) :m_resource {std :: vector(num)} { } std :: vector m_resource; };
..
说我有以下功能 void doWork(Widget && param) // param is an LVALUE of RRef type { Widget store = std::move(param); } 为什么需要使用std::move()将param强制转换回右值?因为param的类型是右值,因为它已在函数签名中声明为右值引用,所以不是很明显吗?是否不应该仅根
..
在下面的代码中,我无法将临时对象作为参数传递给 printAge 函数: struct Person { int age; Person(int _age):age(_age){} }; void printAge(Person& person){ cout
..
我看到在整个C ++标准的许多地方使用的术语“左值到右值转换”。这种转换通常是隐含的,就我所知。 标准的短语的一个意想不到的特征是,他们决定对待左值到右值作为转换。如果他们说,glvalue总是可以接受,而不是prvalue。那句话实际上有不同的含义吗?例如,我们读取左值和x值是glvalues的例子。我们不读取左值和x值可以转换为glvalues。 在我第一次遇到这个术语之前,我习惯
..
我在互联网上阅读了很多,似乎很多人提到以下规则(但我在标准中找不到), 加法运算符+(和所有其他二进制运算符)要求两个操作数都为右值,结果为右值。 等等.. 我检查了C ++标准,并清楚地说明(第3.10 / 2节), 每当一个glvalue出现在一个预期为prvalue的 上下文中, glvalue将被转换为prvalue (第5/9节), 每当glvalue
..
TL; DR 给定以下代码: int * ptr; * ptr = 0; * ptr 应用间接引用之前, ptr 的左值到右值转换? 在许多地方,但似乎没有指定足够的信息来确定 *运算符是否需要这样的转换。 详细 “http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2
..
我很难理解这段代码(来自C ++ 14草案标准 [conv.lval] 的示例)如何调用未定义的行为 g(false)。为什么 constexpr 使程序有效? 此外,“不访问 yn “?在 g()的两个调用中,我们返回了 n 数据成员为什么最后一行说' t访问它? struct S {int n; }; auto f(){ S x {1}; constexpr S y {
..
C ++ 4.2节03 N°1:的结果 左值或类型的右值“数组的NT”或“结合的T未知的阵列”可以被转换成类型的“指针T.”右值的结果是一个指针数组的第一个元素。 的 什么已经在此声明被迷惑了很长的时间,我是,我不明白是什么数组类型的右值意味着什么。这就是说,我不能拿出一个前pression其类型是一个数组,其结果是右值。我读这线程,基本上问同样的问题,接受的答案是“没有,没有数组类型的右值“
..
$ 8.4 / 1 - “左值或类型的右值 “数组N个T”或“未知阵列 结合的T“可被转换为一个 右值类型的“指针到T”的 结果是一个指向第一个 数组的元素“ 我不知道我们如何得到比初始化/申报期间以外的数组类型的右值? 解决方案 我不知道你在这方面是指什么是“初始化/宣言”。但数组类型的右值都不算少见。 结构数据{int数组[10]; };数据f()的;INT的main
..