相关疑难解决方法(0)

什么是右值,左值,x值,glvalues和prvalues?

在C++ 03中,表达式是rvaluelvalue.

在C++ 11中,表达式可以是:

  1. 右值
  2. 左值
  3. x值
  4. glvalue
  5. prvalue

两类已成为五大类.

  • 这些新的表达类别是什么?
  • 这些新类别如何与现有的左值和左值类别相关联?
  • C++ 0x中的右值和左值类别是否与它们在C++ 03中的相同?
  • 为什么需要这些新类别?是WG21神只是想迷惑我们凡人?

c++ expression c++-faq c++11

1291
推荐指数
13
解决办法
17万
查看次数

什么是C++临时工?

我正在阅读Eckel的不变章节,并在Temporaries被解释的部分混淆了.我能得到的是,当我们将引用传递给函数时,编译器会创建一个临时的const对象,因此即使我们将引用作为参数传递,我们也无法修改它.

f(int &a){}
Run Code Online (Sandbox Code Playgroud)

现在我试着在网上查看其他一些Temporaries的参考资料并且被卡住了

http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage %2Fref%2Fcplr382.htm并且

所有临时值都是用C++编写的吗?

这促使我临时工具不仅仅是传递引用并在函数内部创建const对象.现在我可以从这两个链接中获得一些东西,但不能说我已经理解了临时工作的工作,功能和用途整个.如果有人可以解释临时的概念,那将会非常有用.提前致谢.
布鲁斯·埃克尔的原始例子是:

// Result cannot be used as an lvalue
class X {
    int i;
    public:
    X(int ii = 0);
    void modify();
};
X::X(int ii) { i = ii; }
void X::modify() { i++; }
X f5() {
    return X();
}
const X f6() {
    return X();
}
void f7(X& x) { // Pass by non-const reference
    x.modify();
}
int main() {
    f5() = X(1); // OK -- non-const return value
    f5().modify(); …
Run Code Online (Sandbox Code Playgroud)

c++ const

8
推荐指数
2
解决办法
1038
查看次数

rvalue对原始整数的引用何时是短暂的或长寿的?

我用TDM-GCC 4.6.1编译器对rvalue引用做了一些实验,并做了一些我无法用理论解释的有趣观察.我想那里的专家帮我解释一下.

我有一个非常简单的程序,不处理对象,但int原语,并定义了2个函数:foo1(通过rvalue引用返回局部变量)和foo2(按值返回局部变量)

#include <iostream>

using namespace std;

int &&foo1();
int foo2();

int main()
{

int&& variable1 = foo1();
//cout << "My name is softwarelover." << endl;
cout << "variable1 is: " << variable1 << endl; // Prints 5.
cout << "variable1 is: " << variable1 << endl; // Prints 0.

int&& variable2 = foo2();
cout << "variable2 is: " << variable2 << endl; // Prints 5.
cout << "variable2 is still: " << variable2 << endl; // Still prints …
Run Code Online (Sandbox Code Playgroud)

c++ rvalue-reference c++11

0
推荐指数
1
解决办法
415
查看次数

标签 统计

c++ ×3

c++11 ×2

c++-faq ×1

const ×1

expression ×1

rvalue-reference ×1