GCC上实现nullptr的疑问,该如何处理

GCC上实现nullptr的疑问C/C++ code#include iostreamusing namespace stdconst class nullptr_t{public

GCC上实现nullptr的疑问

C/C++ code
#include <iostream>using namespace std;const class nullptr_t{public:    template<typename T> operator T*() const { return (T*)0; }    template<typename C, typename T> operator T C::*() const { return (T*)0; }private:    void operator&() const;} nullptr = {};int main(){    int* p1 = nullptr;//    cout << &nullptr << endl; // error: 'void nullptr_t::operator&() const' is private    return 0;}


疑问一:这个操作符重载对应什么例子?
C/C++ code
template<typename C, typename T> operator T C::*() const { return (T*)0; }


疑问二:是否还有更好的写法?

[解决办法]
一、实际使用例子:
C/C++ code
class B {public:    B(int a) {a_ = a;}    int a_;};int main(){    int* p1 = nullptr;    B b(5);    int B::* a = nullptr;    a = &B::a_;    return 0;}
[解决办法]
探讨

一、实际使用例子:
C/C++ code

class B {
public:
B(int a) {a_ = a;}
int a_;
};

int main()
{
int* p1 = nullptr;
B b(5);
int B::* a = nullptr;
a = &amp;B::a_;
return 0;
}


二、你的原……

[解决办法]
呵呵,这个实现挺不错的。

解答一:
这个操作符重载是对应于指向成员的指针,比如:
C/C++ code
class Test{public:    int a;    void method(void){}};int Test::*p = &Test::a;void (Test::*pm)(void) = &Test::method;int main(){    int* p1 = nullptr;    p = nullptr;    pm = nullptr;        return 0;}
[解决办法]
探讨

这个nullptr看起来没啥用啊,就是可读性好

[解决办法]

[解决办法]
惊现神人老邓问问题!
[解决办法]
同意,我也认为define不好,就是怕类型不安全的问题嘛!
[解决办法]
nullptr这样定义会不会更好一点
C/C++ code
const int nullptr = 0;
[解决办法]
nullptr解决的问题:
例如有两个重载函数
int foo(const char*a);
int foo(int a);
如果有代码foo(NULL),按照期望是应该调用第一个函数的,但是由于在C++中NULL被定义成0,所以实际调用的是第二个,这与我们的直觉不同。nullptr不能直接转换成int,所以如果使用foo(nullptr),调用到的将是"正确"的函数
[解决办法]
没仔细看代码。印象中《Imperfect C++》里面有一章是讲这个的。但是这东西尽管有用,却是用复杂的方式解决简单的问题,个人是不喜欢这类东西。
[解决办法]
探讨
引用:
不过老邓啊,那个定义是给C语言用的??

我在网上找到的中文解释:
目前 C++ 里 NULL 直接宏定义为 0,这个很不对,首先 0 是个整数字面量,没有指针的含义,另外用宏也对命名空间造成污染,并且会让人造成误解,以为跟 C 语言一样,NULL 是个指针,结果传入模板时推导就会错误,所以有的开发人员和小组直接用 0(比如 Qt),而不用 ……

[解决办法]
nullptr 就算要实现,也应该是编译器内部实现,这样才有一点用处

这么模拟出来东西,越搞越糊涂,本来为了解决一个很小很偏的问题,反而引入更多的问题,得不偿失.
[解决办法]
探讨
没仔细看代码。印象中《Imperfect C++》里面有一章是讲这个的。但是这东西尽管有用,却是用复杂的方式解决简单的问题,个人是不喜欢这类东西。



[解决办法]
探讨

引用:
还嫌C++不够复杂吗

如果nullptr是语言(库)实现(C++中的名言:语言设计即库设计,库设计即语言设计),而你的程序中只写 p=nullptr 或 p==nullptr,你就不会说它复杂了吧?
实际上,许多人在夸Java或C#反射好用的时候,为什么没人说反射的实现带来了复杂性呢?毕竟它是语言(库)实现。如果它们不提供反射的实现或极简单的……

[解决办法]
探讨

引用:

引用:
还嫌C++不够复杂吗

如果nullptr是语言(库)实现(C++中的名言:语言设计即库设计,库设计即语言设计),而你的程序中只写 p=nullptr 或 p==nullptr,你就不会说它复杂了吧?
实际上,许多人在夸Java或C#反射好用的时候,为什么没人说反射的实现带来了复杂性呢?毕竟它是语言(……

[解决办法]
探讨
引用:

没必要做成员函数吧。inline就挺好

我主要是想知道如何实现,因为我发现看起来无法用成员函数来重载。

[解决办法]
实现nullptr需要看很多书。
使用nullptr往往是一个错误,代码已经太复杂,太胡乱了。除非你在做一个通用库。
[解决办法]
探讨

引用:

实现nullptr需要看很多书。
使用nullptr往往是一个错误,代码已经太复杂,太胡乱了。除非你在做一个通用库。

我觉得使用nullptr很好啊,C++0x中nullptr将被语法支持。
现在要写将来兼容C++0x的代码,用库来实现,暂时替换使用,不是很好么?

taodm先生能否点评一下64楼中nullptr的实现?

[解决办法]
nullptr的实现不是应该解决调用成员函数/变量时的问题吗?
比如: 
MyClass *obj = nullptr; 
obj.fun(); //使这样的语句在运行时不会出错。

lz的这个实现和直接用NULL这个宏没多少区别吧。

[解决办法]
探讨

这个nullptr看起来没啥用啊,就是可读性好