首页 > 解决方案 > 在变量名之后用 () 声明非固有类型的行为与不使用时不同。即std::mapX(); - 那是怎么回事?

问题描述

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

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

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

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

谢谢。

标签: c++c++11

解决方案


这是最令人头疼的 parse,由 Scott Meyers 创造。

在标准中,查找 Ambiguity resolution [stmt.ambig]

至于段错误,您需要提供代码(请参阅MRE)来帮助您。


推荐阅读