在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?

Declaring non-intrinsic types with () after variable name has different behavior than without. i.e. std::map<int,char>x(); - what's with that?

本文关键字:变量名 int lt map 怎么回事 gt std char 内部 声明 类型      更新时间:2023-10-16

我有一个成员变量声明:std::map<int,char>x;在我的头文件中。它可以编译,但当我运行二进制文件时,在进入构造函数之前,我在初始化类时会遇到segfault。如果我将声明更改为std::map<int,char>x();——也就是说,我只是在变量名后面添加了一个((——它工作得很好,没有segfault。

我不能给出比上面更具体的例子了,但如果有人对此有经验,我很想知道发生了什么

编译器版本为gcc 4.8.5版目标是x86_64-redhat-linux

我意识到这是相当不具体的,但我只是在寻找一个一般的答案。

谢谢。

这是Scott Meyers创造的最令人烦恼的解析。

在标准中,查找歧义分辨率[stmt.ambig].

至于segfault,您需要提供代码(请参阅MRE(来帮助您实现这一点。