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

nullptr不是特殊关键字和std :: nullptr_t的对象吗?

可能重复:
nullptr究竟是什么?

我首先认为这是一个关键字.我目前的gcc没有nullptr以不同的色调突出显示.为了验证这一点,我写了以下内容:

void *&p = nullptr;
Run Code Online (Sandbox Code Playgroud)

所以我从错误中得到了一些线索:

错误:从'std :: nullptr_t'类型的右值开始,无效初始化'void*&'类型的非const引用

如果nullptr是一个对象那么它真的是一个简单的指针0吗?换句话说,假设我写道:

#define NULL nullptr
Run Code Online (Sandbox Code Playgroud)

以上语句是否不会改变我的代码中的任何内容?此外,了解std::nullptr_t类型的其他用例会很有趣.

c++ pointers nullptr c++11

4
推荐指数
2
解决办法
3499
查看次数

C++中的引用和文字

我知道"文字"(c字符串,int或其他)存储在某处(在一个只读数据部分显然是.rodata)也许这不准确......

我想了解为什么此代码导致运行时错误:

#include <iostream>
using namespace std;

const int& foo()
{
    return 2;
}
const char* bar()
{
    return "Hello !";
}

int main() {

    cout << foo() << endl; // crash

    cout << bar() << endl; // OK

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

foo返回一个文字的const引用(2)为什么会导致崩溃?是存储在foo()堆栈中的整数2?

另请参阅:为什么字符串文字是l值而所有其他文字都是r值?

c++ rvalue

3
推荐指数
1
解决办法
399
查看次数

标签 统计

c++ ×3

c++11 ×2

c++-faq ×1

expression ×1

nullptr ×1

pointers ×1

rvalue ×1