7得票4回答
为什么这个转换的结果不是一个左值?

我需要一些关于这个奇怪行为的建议 - 让我们看看这段代码: int ** p; 这段代码可以顺利编译: p++; 但是这个: ((int**)p)++; 给我这个错误信息:“error: lvalue required as increment operand”。 我将p转...

35得票4回答
rvalue引用允许悬空引用吗?

请考虑以下内容。#include <string> using std::string; string middle_name () { return "Jaan"; } int main () { string&& danger = middl...

18得票1回答
一个返回的对象如何可以被赋值?

在《Effective C++》的第三条建议中,Scott Meyers建议对名为Rational的类重载operator*。 class Rational { ... }; const Rational operator*(const Rational& lhs, co...

8得票2回答
C++中的rvalue绑定混淆

我有三个函数调用,我认为它们应该被视为(大约)相同的,但显然它们并不是。我正试图理解为什么其中一个无法编译(g ++ -std = c ++ 0x)。 // Minimal example to reproduce a compile bug I want to understand. #...

7得票2回答
C++11中的lvalue、rvalue和std::move()

I have the following code: #include <iostream> using namespace std; void test(int& a) { cout << "lvalue." << endl; } voi...

8得票2回答
为什么在lambda表达式的参数中使用`auto &&`时,它不会像所谓的“通用引用”一样运作?

为什么下面示例中的 && 参数类型即使在一个 "推断上下文" 中似乎是一个所谓的 "万能引用",它也不会表现出这种行为,而是被解释为 r-value: auto main() -> int { using MyFn = void (*)(int &amp...

12得票7回答
在C语言中,rvalue存储在哪里?

在 C 语言中,我有这段代码:int a; a = 10 + 5 - 3 我想问一下:(10+5-3)存储在哪里? (据我所知,a 存储在栈中,那么 (10+5-3) 呢?这个右值是如何计算的?) 我想问一下:(10+5-3)存储在哪里? (据我所知,a 存储在栈中,那么 (10+5-3) ...

13得票4回答
数组和右值

$4.2/1 - "类型为“数组of N T”或“未知边界的T数组”的左值或右值可以转换为类型为“指向T的指针”的右值。 结果是一个指向数组的第一个元素的指针。" 我不确定除了在初始化/声明期间,我们如何获得数组类型的右值?

11得票1回答
临时数组的元素本身不是rvalue吗?

using intArray = int[]; int (&a) [4] = intArray{1, 2, 3, 4}; 这是不允许的,因为将非常量左值引用绑定到临时右值是非法的。g++ 4.9.1和clang 3.4.2都会报错;当a被const修饰时,编译可以正常通过。 in...

8得票2回答
为什么这个右值调用有歧义?

为什么这个右值调用是有歧义的?我可以有AA和AA&,编译器将知道使用AA&。但是当我添加第三个选项时,就会出现错误。显然,AA&&比其他重载函数更好,如对于int,int优于long。为什么这是有歧义的?有没有办法保留所有3个重载并清楚地表明我想要哪一个?(强制...