相关疑难解决方法(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万
查看次数

临时对象是xvalues吗?

我目前正在撰写我的学位论文,它还涉及C++ 11背后的理论的一些解释,这很好,因为C++是我选择的编程语言,而且标准或多或少是免费提供的(N3337)让你自己迷失在.

然而,我试图准确而详细地解释新的xvalue类别时遇到了障碍.我的理解是临时对象总是一个xvalue但我在标准中找不到任何对此的引用.我的理解是函数的表达式的值类别调用具有非引用返回类型的函数是xvalue.标准说"xvalue是涉及rvalue-references的某种表达式的结果",这让我烦恼.例如:

TestClass { ... };
testClass createObject() { return testClass(); }

void someFunction(TestClass& testClass) { ... }
void someFunction(TestClass&& testClass) { ... }

someFunction(createObject());
Run Code Online (Sandbox Code Playgroud)

正如所料,上面将调用带有rvalue-reference作为参数的重载函数.然而,createObject()不返回rvalue-reference,它返回一个TestClass类型的临时对象.我现在的问题是,我必须解释其背后的原因.表达式"createObject()"评估为什么?如果它确实是一个xvalue,因为它返回一个临时对象,它背后的推理是明确的,并且在重载解析期间有利于rvalue-reference.如果没有,那么关于标准的这种行为的解释是什么?是否有某些我尚未找到的隐式转换逻辑?

如果有人能帮我解决这个问题,我真的很感激,因为即使经过几天的挖掘和阅读,我还没有想出一个合理的解释.非常感谢提前.

c++ rvalue-reference xvalue c++11

7
推荐指数
1
解决办法
566
查看次数

glvalue的真实例子和解释?

我知道“ xvalues”,“ prvalues”,“ rvalues”和“ lvalues”是什么,它们有什么帮助,我已经看到了它们的真实示例。但是我从来不了解“ glvalue”是什么,以及它如何与其他人合作。我到处搜索过,但运气不好,即使在最新的标准论文中也很少有人注意到。有人可以向我解释一下并显示一些示例吗?

请注意,这不是重复这个,因为即使是有没有人给“glvalue”的一个例子。这里也是。几乎没有这样提到:

glvalue(“广义”左值)是左值或x值。

c++ c++11

3
推荐指数
2
解决办法
931
查看次数

当推回指向指针向量的指针时,C++获取临时地址

我在代码中收到警告:

警告:取临时的地址

我见过类似的问题,但他们没有回答我的具体问题.

这是我的代码正在做的事情:

vector<A*>* ex_A;

ex_A->push_back( &A());  //I get this warning taking address of temporary
Run Code Online (Sandbox Code Playgroud)

这是未定义的行为吗?

我之前确实有这个,这很好,但我不想担心从堆中删除内存.

vector<A*>* ex_A;

ex_A->push_back( new A());
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释这个警告意味着什么吗?

c++

2
推荐指数
1
解决办法
3049
查看次数

标签 统计

c++ ×4

c++11 ×3

c++-faq ×1

expression ×1

rvalue-reference ×1

xvalue ×1