【问题标题】:Why do equal expressions in 'class' and 'main' behave differently?为什么'class'和'main'中的相等表达式表现不同?
【发布时间】:2019-12-11 11:34:22
【问题描述】:
 class Class {
  public:
   std::pair<int,int> p (45, 12);// error: "requires a type specifier"
  };

 int main(){
    std::pair<int, int> pm (45, 12);// ok
 }

'utility' 标头已包含在内。另外,如果我尝试通过“make_pair”创建一对,编译器会写“标识符“make_pair”未定义”,但它是在“实用程序”中定义的,不是吗?

【问题讨论】:

  • 这些不是表达,而是定义。第一个是带有(错误)初始化的成员变量声明。第二个是局部变量的定义。那是有区别的。
  • 在类中进行内联初始化时不能使用括号,以消除函数声明的歧义。要么使用带有= 的“赋值”语法,要么使用带有花括号{} 的统一初始化。

标签: c++ class initialization


【解决方案1】:

如果可以的话,一个非正式的回答。这两种说法是截然不同的野兽。第一个是尝试初始化的成员变量声明。

第二个是声明一个具有自动存储持续时间的变量,同样是初始化。

这个烂摊子在 C++11 中被统一初始化清理了:

std::pair<int,int> p{45, 12};

在任何一种情况下都可以使用。注意大括号语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多