c++ - 在变量名之后用 () 声明非固有类型的行为与不使用时不同。即std::mapX(); - 那是怎么回事?
问题描述
std::map<int,char>x;
我的头文件中有一个成员变量声明:
它可以编译,但是当我运行我的二进制文件时,我什至在进入构造函数之前就在类的初始化中遇到了段错误。如果我将声明更改为std::map<int,char>x();
-ie 我只是在变量名后添加了一个 () - 它工作正常,没有段错误。
我不能给出比上面更具体的例子,但如果有人有这方面的经验,我很想知道发生了什么。
编译器版本是 gcc 版本 4.8.5 目标是 x86_64-redhat-linux
我意识到这是相当不具体的,但我只是在寻找一个普遍的答案。
谢谢。
解决方案
这是最令人头疼的 parse,由 Scott Meyers 创造。
在标准中,查找 Ambiguity resolution [stmt.ambig]。
至于段错误,您需要提供代码(请参阅MRE)来帮助您。
推荐阅读
- .net - Azure DevOps - 无法运行已安装的 dotnet 工具
- gitlab - 什么可能导致我使用 Kaniko 在 GitLab CI 上出现“错误检查推送权限”错误?
- linux - Qt Linux-Ubuntu 20.04 64 位-无法运行编译器“i686-linux-gnu-g++”
- python - 键盘库在 python 3.9.1 中不起作用
- c# - 改进获取“如果只有一个”查询
- flutter - 为什么flutter app项目名称中会出现之前的包/应用名称?
- database - Symfony 项目中的关系数据库
- phpmyadmin - 我无法打开 http://localhost/phpmyadmin/ 如何解决?
- regex - 正则表达式随后捕获字符之前的第一个单词 - Postgresql
- c# - UI 控件之间的动态填充