在C++ 03中,表达式是rvalue或lvalue.
在C++ 11中,表达式可以是:
两类已成为五大类.
可能重复:
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字符串,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?