相关疑难解决方法(0)

什么是nullptr?

我们现在拥有许多新功能的C++ 11.一个有趣且令人困惑的(至少对我来说)是新的nullptr.

嗯,不再需要令人讨厌的宏了NULL.

int* x = nullptr;
myclass* obj = nullptr;
Run Code Online (Sandbox Code Playgroud)

尽管如此,我还没有得到如何nullptr运作.例如,维基百科的文章说:

C++ 11通过引入一个new 关键字作为一个区分空指针常量来解决这个问题:nullptr.它的类型为nullptr_t,它是可隐式转换的,可与任何指针类型或指向成员类型的类型相媲美.除了bool之外,它不可隐式转换或与整数类型相比.

它是一个关键字和一个类型的实例?

另外,你有另一个例子(在维基百科旁边)哪里nullptr优于好老0

c++ pointers nullptr c++11

546
推荐指数
8
解决办法
31万
查看次数

是否有适用于vim的C++ 11语法文件?

特别是,初始化列表的显示非常糟糕:

vector<int> v({1,2,3});
Run Code Online (Sandbox Code Playgroud)

将突出显示红色的花括号(表示错误).

c++ vim c++11

65
推荐指数
5
解决办法
2万
查看次数

为什么不能取nullptr的地址?

在C++ 11标准,为什么服用nullptr是不允许的,而一个地址,我不明白其中的道理允许携带自己的std :: nullptr_t实例的地址.除了nullptr是保留关键字这一事实之外,是否有任何指定的推理作出此决定?

仅仅因为它让我很开心,我试图用以下函数环绕这个限制:

decltype(nullptr)* func(const decltype(nullptr) &nref) noexcept
{
    return const_cast<decltype(nullptr)*>(reinterpret_cast<const decltype(nullptr)*>(&nref));
}
Run Code Online (Sandbox Code Playgroud)

我不得不在参数上使用reinterpret_cast,因为没有它我得到了歇斯底里的错误:

error: invalid conversion from 'std::nullptr_t*' to 'std::nullptr_t*' [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

当我通过直接传递nullptr来调用此函数时,每次都会得到一个不同的地址.是否为nullptr动态分配地址及时进行比较等?或者(可能更有可能)编译器可能强制执行底层对象的临时副本?

当然,这些都不是至关重要的信息,我只是觉得有趣的是为什么要实施这一特定的限制(以及随后为什么我会看到我的行为).

c++ std nullptr c++11

41
推荐指数
3
解决办法
3840
查看次数

标签 统计

c++ ×3

c++11 ×3

nullptr ×2

pointers ×1

std ×1

vim ×1