这个警告在orwell dev C ++ IDE中意味着什么?

时间:2014-09-16 13:38:19

标签: c++ warnings

我最近写了下面简单的程序,但编译器显示警告。

#include <iostream>
int main()
{
    int a();
    std::cout<<a;
    return 0;
}
  

[警告]'int a()'的地址将始终评估为'true'[-Waddress]

上述警告的含义是什么?为什么a的值是1而不是0?

2 个答案:

答案 0 :(得分:3)

它可能看起来就像a的定义一样int,但是:

int a();

声明函数 a不带参数并返回int

使用:

int a{};

代替。

std::cout<<a;

使用operator<<()调用bool,该true始终为非零,因此{{1}}。

答案 1 :(得分:2)

int a();声明一个函数,而不是一个变量。如果您希望a为零初始化变量,那么您将需要

之一
int a{};  // C++11 or later
int a = int();
int a(0);
int a = 0;

<<没有可以直接获取函数的重载;所以它寻找一个合适的转换序列到它重载的类型,并找到:

int() -> int(*)() -> bool

即使用标准函数指针指针布尔转换。函数指针不为null,因为声明的函数必须存在且具有地址;所以布尔值为true