【发布时间】: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 是一个字符串流。是的,我正在使用重载的