以下声明之间的区别是什么

What is the diff between following declarations?

本文关键字:区别 是什么 之间 声明      更新时间:2023-10-16
vector<double> salaries();
vector<double> salaries;

我想声明一个空向量,并且上面的两个声明是可能的,因为编译器没有返回错误。上述两个声明有什么区别?

通过更新,您显示的两个声明是:

  1. vector salaries();//名为 salary 的函数,它不带参数并返回 vector
  2. 向量<双精度>工资;//类型为 vector 默认构造的变量

请注意,编写 (1) 有时是为了执行与 (2) 相同的操作(即使用默认构造函数)。但这不是编译器的看法 - 这通常被称为"最令人烦恼的解析",您应该能够通过一些搜索找到更多信息。基本上,这是语言语法中的(故意的)歧义,通过要求将该特定语法视为函数来解决语言规范,但仍然让很多人感到惊讶。