为什么我们有nullptr而没有nullchar? 我的理解——我确信我即将学习——是将 NulLPTR < /C> >添加到C++中,使指针的零值意味着指针不指向有效对象的约定形式化。是否有理由(或反对)添加一个相应的nullchar,以使字符的零值表示该字符不是有效字符,而是字符串的终止符的约定形式化?我可以看到这两个案例有几个共同点:
类型安全:为什么我们有nullptr而没有nullchar? 我的理解——我确信我即将学习——是将 NulLPTR < /C> >添加到C++中,使指针的零值意味着指针不指向有效对象的约定形式化。是否有理由(或反对)添加一个相应的nullchar,以使字符的零值表示该字符不是有效字符,而是字符串的终止符的约定形式化?我可以看到这两个案例有几个共同点:,c++,pointers,char,nullptr,C++,Pointers,Char,Nullptr,类型安全:0可以有几种不同的类型,因此很容易错误地将非指针变量指定为零,而不是指定的指针变量。如果正确地调用了重载函数,也很容易调用错误的重载函数。使用特殊的强类型值可以防止这种错误,对于char类型也是如此 表达性:将变量指定为nullptr可以让读者清楚地知道变量是指针(因为只有指针可以指定给该值),并且它不指向任何对象。将字符分配给nullchar将增加同样的清晰度和可读性 还有很多,但我相信你会明白的。那么为什么我们有nullptr而没有nullchar?没有,因为没有那么多的理由nul
0
可以有几种不同的类型,因此很容易错误地将非指针变量指定为零,而不是指定的指针变量。如果正确地调用了重载函数,也很容易调用错误的重载函数。使用特殊的强类型值可以防止这种错误,对于char
类型也是如此
表达性:将变量指定为nullptr
可以让读者清楚地知道变量是指针(因为只有指针可以指定给该值),并且它不指向任何对象。将字符分配给nullchar
将增加同样的清晰度和可读性
还有很多,但我相信你会明白的。那么为什么我们有
nullptr
而没有nullchar
?没有,因为没有那么多的理由<添加code>nullptr是为了消除对NULL
宏的需要,该宏在C中被定义为类似(void*)0
。在C语言中,void*
可以隐式转换为任何指针类型,因此这是可行的。然而,C++中的情况并不是这样,它消除了隐式的可兑换性(但不是它的逆,从任何指针类型到'\0'
是一个有效字符。'\0'
是一个非常复杂的字符。如果您愿意,您可以自己制作!将其放在一个“全局”标题中:static inline constexpr char nullchar='\0'
@Enrico完全可以接受。你能在问题中举例说明为什么你认为空字符是个好主意吗?我个人不认为有必要“在C中,void*可以隐式转换为任何指针类型,所以这是可行的。”不,它可以根据定义工作。啊哈!指针有不同类型的事实是我忽略的关键点。谢谢