打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
Can std::cout print "NULL" instead of 0 when printing a null pointer?
打印空指针时,std::cout
是否可以打印">NULL"而不是0??我可以写一个简单的if语句,比如
if(pointer == nullptr)
std::cout << "NULL";
但是,如果不使用if语句,我能得到同样的结果吗?
使用if语句确实无法转义,但可以使用三元运算符将其转换为一行:(p == NULL ? std::cout << "NULL" : std::cout << p);
#include <iostream>
int main() {
void *p = NULL;
(p == NULL ? std::cout << "NULL" : std::cout << p);
std::cout << std::endl;
p = new int;
(p == NULL ? std::cout << "NULL" : std::cout << p);
std::cout << std::endl;
}
演示
您可以使用三元运算符?
。
pointer ? std::cout << pointer : std::cout << "NULL";
或者使用gnu c++编译器扩展IF,指针是char*
std::cout << (pointer ?: "NULL");
假定第二种方法不会适用于所有编译器,因为它不是语言的正式组成部分。
我不相信指针有std::boolalpha
的等价物。
[编辑]
正如@seleciii44所指出的,在这里的堆栈溢出帖子中,您可以编写自己的重载流插入运算符
std::ostream & operator<<(std::ostream &s, std::nullptr_t)
{
return s << "nullptr";
}
我可以想出两种方法。
1( 明确的方法:使用三元运算符(?:(
cout<<((ptr)?"":"NULLn");
2( 如果你真的不想使用任何条件语句,这是一种糟糕的方式。
cout<<&("NULL"[4*(!!ptr)]);
为什么它有效
ptr将根据其值将ptr的值设置为0或1。
如果为null,cout将看到从0索引开始的char*,并打印"null",否则它将从索引4中看到它,并打印终止字符。
这是一种非常糟糕的方式,因为nullptr可能是实现定义的,并且可能不可移植。
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 为什么在C++中增加指针后打印了一个值而不是 NULL/0?
- 打印空指针时,std::cout 可以打印 "NULL" 而不是 0 吗?
- 链接列表打印null -C
- 打印超过 NULL 字符的内存内容
- printf() 混淆 - 尝试打印字符串时打印 (null),打印缓冲区时打印正确的值
- 需要在jsoncpp中将空字典打印为{},而不是null
- 打印出设置为 NULL 的字符*的可能方法?