【问题标题】:warning: the compiler can assume that the address of ‘x’ will never be NULL警告:编译器可以假设‘x’的地址永远不会为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 (&amp;t != NULL)...
  • 什么是m_Streamm_Stream &lt;&lt; t 是做什么的?它会尝试打印t的地址吗?
  • @1201ProgramAlarm m_Stream 是一个字符串流。是的,我正在使用重载的

标签: c++ gcc g++


【解决方案1】:

当您通过引用 (t) 传递参数时,它不能为 NULL。 (通过指针传递,可以为NULL)

【讨论】:

    猜你喜欢
    • 2019-10-30
    • 2016-06-02
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多