Tag: nullptr

是否安全#define NULL nullptr?

我在下面的macros中看到了许多最顶级的头文件: #define NULL 0 // C++03 在所有的代码中, NULL和0可以互换使用。 如果我改变它。 #define NULL nullptr // C++11 会造成不良副作用吗? 我可以想到以下用法的唯一(好)副作用将会变形, int i = NULL;

C ++ 11清除shared_ptr时,我应该使用重置或设置为nullptr?

我有一个关于C ++ 11最佳实践的问题。 清除shared_ptr时,应该使用不带参数的reset()函数,还是应该将shared_ptr设置为nullptr ? 例如: std::shared_ptr<std::string> foo(new std::string("foo")); foo.reset(); foo = nullptr; 有没有真正的区别,还是有两个方法的优点/缺点?

为什么你不能把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)); } 我不得不在参数上使用reinterpret_cast,因为没有它我得到了歇斯底里的错误: error: invalid conversion from 'std::nullptr_t*' to 'std::nullptr_t*' [-fpermissive] 当我通过直接传递nullptr来调用这个函数时,我每次都得到一个不同的地址。 是nullptrdynamic地分配一个地址及时进行比较等? 或者(可能更可能)也许是编译器强制底层对象的临时副本? 当然这些都不是重要的信息,我只是觉得有趣的是为什么这个特定的限制被实现(以及为什么我看到了我的行为)。

可以在gcc模拟nullptr?

我看到nullptr是在Visual Studio 2010中实现的。我喜欢这个概念,并希望尽快开始使用它。 但是GCC目前还不支持。 我的代码需要同时运行(但不必与其他编译器编译)。 有没有办法“模仿”呢? 就像是: #define nullptr NULL (这显然不能很好地工作,只是为了表明我的意思。)

使用nullptr有什么好处?

这段代码在概念上对三个指针(安全指针初始化)做同样的事情: int* p1 = nullptr; int* p2 = NULL; int* p3 = 0; 那么,分配指针nullptr的优点是分配NULL或0值呢?

NULL vs nullptr(为什么被replace?)

我知道在C ++中0x或NULL被基于指针的应用程序中的nullptr所取代。 我只是好奇他们为什么做这个replace的确切原因? 在什么情况下使用nullptr比NULL nullptr利于处理指针?

什么是nullptr?

我们现在拥有许多新function的C ++ 11。 一个有趣和令人困惑的(至less对我来说)是新的nullptr 。 好了,再也不需要讨厌的macrosNULL 。 int* x = nullptr; myclass* obj = nullptr; 不过,我没有得到如何nullptr作品。 例如, 维基百科文章说: C ++ 11通过引入一个新的关键字来作为一个可区分的空指针常量来纠正这个问题:nullptr。 它的types是nullptr_t ,它可以隐式转换,并且可以和任何指针types或成员指针types进行比较。 除了bool之外,它不是可以转换的,也不可以与整数types相比较。 它是怎样的一个关键字和一个types的实例? 另外,你是否还有另外一个例子(维基百科之外), nullptr优于0 ?