放置额外的圆括号-代码无法编译
Putting extra round brackets - code fails to compile
所以,我有一个函数,它返回一个布尔
bool func_true()
{
// do some stuff
return true;
}
现在实际的代码称之为
if (auto err = func_true())
{
// some stuff
std::cout << std::boolalpha << err << 'n';
}
到目前为止一切都很好。如果我在调用周围多加一个圆括号,编译就会失败:
if ((auto err = func_true())) // doesn't compile!
{
std::cout << std::boolalpha << err << 'n';
}
GCC错误:
error: expected primary-expression before 'auto'
if ((auto err = func_true()))
^~~~
http://coliru.stacked-crooked.com/a/812424bfdb66eec3
这是一个gcc错误,还是我做错了什么?
if
语句的语法(根据最新的C++标准ISO/IEC 14882:2014)如下:
if
(
条件)
语句[else
声明]
条件的语法如下:
表达式
[
属性说明符seq]
decl说明符seq声明符=
初始值设定项子句
[
属性说明符seq]
decl说明符seq声明符支持的初始化列表
现在,代码auto err = func_true()
匹配条件的第二种形式,特别是,auto
匹配decl说明符seq,err
匹配declarator和func_true()
匹配>initializer子句
但是代码(auto err = func_true())
不能匹配条件的第二或第三种形式,因为(
不能启动属性说明符seq或decl说明符seq,但它可以启动表达式
语法为:
[表达式
,
]赋值表达式
现在,如果您遵循语法定义,您会发现auto
不能启动表达式(标识符可以,但auto
是关键字,因此不是标识符)
简单地说,GCC的行为是正确的,这是一个语法错误。
相关文章:
- 如何修复sfml c++代码编译错误
- 尝试用java代码编译和运行c++代码
- 此代码编译良好,但文件未创建?请指出错误
- 为什么我的 BaseClass:Method 代码编译(带有单冒号)?
- 代码编译没有任何输出,入门程序
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- 代码编译但不起作用!cmd窗口只是理想和理想,但什么也没发生
- 无法使用 g++ 使用C++代码编译 C 库
- 如何在Ubuntu中使用Visual Studio代码编译C++代码
- 推力+提升代码编译错误
- C++代码编译,但在 Zorin OS 上运行时显示错误
- 如何在使用模板时将 CPP 代码编译到库文件中
- 是否可以将Visual Studio 2017将C 代码编译到EXE以外的文件类型中
- 使用 Visual Studio for C++ 代码编译错误
- 使用 Android Studio 使用本机代码编译 apk 时,如何在链接处删除 libgnustl_static.
- 使用 Emscripten 将 OpenCV 代码编译C++ Javascript
- 将C 代码编译到独立应用程序.App
- 为什么此代码编译 (C++11) 而没有类型不匹配错误
- 重用编译器前端的结果,以加快多个配置/平台的C++代码编译
- 如何将C++11代码编译为网络汇编