【问题标题】:variable initialization with int() [duplicate]使用 int() 进行变量初始化 [重复]
【发布时间】:2023-04-03 17:19:01
【问题描述】:

我尝试了一些不同的初始化变量的方法。

int a(0);
cout<<a; 

此代码段的输出为 0

另外,我用0初始化a

int a= int();
cout<<a;

output: 0

然后我试试这个:

int a(int());
  cout<<a;

这次输出是1

实际上 int() 函数返回的值是什么? 01

【问题讨论】:

  • 啊,最烦人的解析,我们又见面了。
  • en.wikipedia.org/wiki/Most_vexing_parse 基本上,int a(int()); 被视为函数声明
  • @JoachimPileborg,在那个问题中,没有使用 int() 函数,我想知道 int() 在这里做什么?

标签: c++ variable-initialization


【解决方案1】:

我认为您的最后一次尝试 (int a(int())) 是“最令人烦恼的解析”的一个示例。因此,a 是一个函数,而不是一个 int。

这个:

#include <typeinfo>

std::cout << typeid(a).name() << std::endl;

产量:

FiPFivEE

把这个结果here 给出:

int ()(int (*)())

【讨论】:

  • 当我在写 int a(0) 时。 a是int还是函数???
  • @lukai 你应该阅读这篇文章 (herbsutter.com/2013/05/09/gotw-1-solution),它解释了初始化变量的可能语法
  • @piwi 我不知道。首先,它只适用于 C++11,大多数专业人士还不能使用。其次,它包含了相当多的坏建议(比如更喜欢使用混淆和容易出错的auto 形式而不是更明确的形式)。
  • @JamesKanze 它不适用于 C++11
  • @piwi 您站点的文章充满了仅在 C++11 中有效的语法。对新的初始化序列进行标准化一个好主意,但是工业界的人们还需要几年的时间才能做到这一点。然而,在任何地方使用auto(文章中的另一个建议)是一个可怕的想法;它混淆了,而且很容易出错。
【解决方案2】:

执行int() 创建一个临时整数并对其进行值初始化。没有特定值的初始化整数值将为零。所以声明

int a = int();

value 初始化一个临时整数,并将其复制到a

但是对于第三个示例,正如许多人指出的那样,您实际上声明了一个名为 a 的函数。

【讨论】:

  • 这意味着 int a(int ()) ,在这种情况下 int() 在这里没有起到任何作用。
  • “执行 int() 创建一个临时整数并默认构造它。默认构造的整数的值为零。”:正确的句子实际上是,“执行 int() 创建一个临时整数并且值初始化它。值初始化的整数将具有零值。"。
  • @CassioNeri 啊,是的,谢谢。
  • 他声明了一个返回int的函数,并将一个指向函数的指针作为参数。他没有“创建”它,如果他尝试使用该函数,他仍然需要在其他地方进行定义。
猜你喜欢
  • 2013-12-21
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
相关资源
最近更新 更多