警告:编译器可以假设‘x’的地址永远不会为NULL
Posted
技术标签:
【中文标题】警告:编译器可以假设‘x’的地址永远不会为NULL【英文标题】:warning: the compiler can assume that the address of ‘x’ will never be NULL 【发布时间】:2019-04-13 18:43:29 【问题描述】:我编写了以下代码并收到了两个警告。在线搜索仍然很混乱。
template <typename T>
LogMgr &operator << (const T &t)
m_Stream << t;
return *this;
警告:编译器可以假设‘t’的地址永远不会是NULL [-Waddress]
警告:与 NULL [-Wnonnull-compare] 比较的非空参数“t”
【问题讨论】:
这与编译器做出某些假设有关,这些假设可能会导致错误的代码。见rachid.koucha.free.fr/tech_corner/nonnull_gcc_attribute.html 请显示足够的代码来重现警告。 我发现错误消息不太可能指向那段特定的代码。从消息中,您似乎在某处使用if (&t != NULL)...
。
什么是m_Stream
? m_Stream << t
是做什么的?它会尝试打印t
的地址吗?
@1201ProgramAlarm m_Stream 是一个字符串流。是的,我正在使用重载的
【参考方案1】:
当您通过引用 (t) 传递参数时,它不能为 NULL。 (通过指针传递,可以为NULL)
【讨论】:
以上是关于警告:编译器可以假设‘x’的地址永远不会为NULL的主要内容,如果未能解决你的问题,请参考以下文章
在 NULL 表示为 0 的平台上,编译器是不是曾经为 NULL <= p 生成意外代码
在 NULL 表示为 0 的平台上,编译器是不是曾经为 NULL <= p 生成意外代码