Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么结果输出到1_C++_C++11_Visual C++ - Fatal编程技术网

C++ 为什么结果输出到1

C++ 为什么结果输出到1,c++,c++11,visual-c++,C++,C++11,Visual C++,我有一个如下所示的简单程序 #include<iostream> using namespace std; class A { public: A() { int a(); cout<<"\n value of A is:- "<<a<<"\n\n"; } }; int main() { A obj; return 0; } #包括 使用名称空间std; 甲级 { 公众: ()

我有一个如下所示的简单程序

#include<iostream>

using namespace std;

class A
{

  public:
    A()
    {
      int a();
      cout<<"\n value of A is:-  "<<a<<"\n\n";
    }
};

int main()
{
  A obj;
  return 0;
}
#包括
使用名称空间std;
甲级
{
公众:
()
{
int a();
cout根据,
int a();
是函数声明,它不带参数并返回
int
。当您输出时,它将衰减为不为null的函数指针,然后转换为
bool
true
,因此这里的结果是
1

如果你只想申报,你可以

int a;
int a = 1; // initialized with the specified value
int a{2};  // initialized with the specified value, since C++11
int a{};   // initialized with 0, since C++11
如果您想声明并初始化它,您可以

int a;
int a = 1; // initialized with the specified value
int a{2};  // initialized with the specified value, since C++11
int a{};   // initialized with 0, since C++11
根据,
int a();
是函数声明,它不带参数并返回
int
。当您输出时,它将衰减为不为null的函数指针,然后转换为
bool
true
,因此这里的结果是
1

如果你只想申报,你可以

int a;
int a = 1; // initialized with the specified value
int a{2};  // initialized with the specified value, since C++11
int a{};   // initialized with 0, since C++11
如果您想声明并初始化它,您可以

int a;
int a = 1; // initialized with the specified value
int a{2};  // initialized with the specified value, since C++11
int a{};   // initialized with 0, since C++11

您似乎觉得
int a();
声明了一个变量。这是不正确的。您声明的函数名为
a
,没有返回
int
的参数

您可能想要的是
inta;

此外,您必须在读取变量之前对其进行初始化(如在输出语句中),否则程序将包含未定义的行为,并且没有任何意义,编译器可以自由生成它喜欢的任何代码。这不是您想要的情况,因此您真正想要的是
int a=0;


至于为什么您会得到
1
作为输出;
a
正在转换为
bool
true
),打印为
1

,您似乎觉得
int a();
声明了一个变量。这是不正确的。您声明的函数名为
a
,没有返回
int
的参数

您可能想要的是
inta;

此外,您必须在读取变量之前对其进行初始化(如在输出语句中),否则程序将包含未定义的行为,并且没有任何意义,编译器可以自由生成它喜欢的任何代码。这不是您想要的情况,因此您真正想要的是
int a=0;

至于为什么您会将
1
作为输出;
a
正在转换为
bool
true
),打印为
1

int a()
声明一个名为
a
的函数,不带任何参数并返回
int
。当您尝试输出一个函数时,它会转换为函数指针,而函数指针又会转换为
bool
。函数的地址将始终为非空,因此它会转换为
true
,并打印为1

但是请注意,您违反了“一个定义”规则:如果函数缺少定义,则不允许获取函数的地址。但是,编译器不需要诊断违反ODR的情况。在这种特殊情况下,编译器决定不关心实际地址,因为它知道该地址是非ODR的-不管怎样都是空的

如果要声明一个
int
值并初始化它,正确的语法是

int a{};
inta()
声明一个名为
a
的函数,不带任何参数并返回
int
。当您尝试输出一个函数时,它会转换为函数指针,而函数指针又会转换为
bool
。函数的地址将始终为非空,因此它会转换为
true
,并打印为1

但是请注意,您违反了“一个定义”规则:如果函数缺少定义,则不允许获取函数的地址。但是,编译器不需要诊断违反ODR的情况。在这种特殊情况下,编译器决定不关心实际地址,因为它知道该地址是非ODR的-不管怎样都是空的

如果要声明一个
int
值并初始化它,正确的语法是

int a{};

P>>/P>,所以我认为它是“输出”,它的编译成功。有0个生成错误。进程以状态0结束(0分钟(s),0秒(s))0个错误,0个警告(0分钟(s),0秒(秒))不,它不编译。你写了代码>对不起它的拼写错误…纠正它…最麻烦的解析。所以我认为它是“输出”。高度可疑。它的编译成功..有0个生成错误..进程终止,状态为0(0分钟,0秒)0个错误,0个警告(0分钟,0秒))不,它没有编译。您编写了
对不起,它有问题..更正了它…最麻烦的解析。实际上,没有(常规)
运算符的函数指针重载实际上,没有
运算符的(常规)函数指针重载您也可以初始化这样的整数:
inta(42);
您也可以初始化这样的整数:
inta(42);