前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cmake+gcc解决extended initializer lists only available with -std=c++11 or -std=gnu++11

cmake+gcc解决extended initializer lists only available with -std=c++11 or -std=gnu++11

作者头像
10km
发布2022-05-07 09:59:05
6150
发布2022-05-07 09:59:05
举报
文章被收录于专栏:10km的专栏

有时,我们需要一个结构体变量做为参数传递给函数,后面又不需要再用到这个结构体变量,所以如果专门定义一个变量,再将这个变量传递给函数就显得挺罗嗦。 就像下面这段代码,tmpStruct只是起到一个数据包装的作用,调用test()之后并不再用到,所以这个变量就显示有些多余 。

代码语言:javascript
复制
#include <iostream>
struct _stA{
    char *a;
    int b;
    int c;
}stA;
void test(_stA n){
    cout<<n.a<<endl;
}
int main() {
    char str[]="hello!";
    _stA tmpStruct{str,0,1};//定义一个变量装载str等数据;
    //或者写成_stA tmpStruct={str,0,1}也是可以的
    test(tmpStruct);//将tmpStruct做为变量传递给test
}

这时我们可以将数据包装成临时结构体变量(或者叫匿名变量)传递给要调用函数。所以调用方式可以简化成下面这样:

代码语言:javascript
复制
int main() {
    char str[]="hello!";
    test(_stA{str,0,1});//编译器会为_stA{str,0,1}结构体生成一个临时变量
}

但是重新编译,会出下面警告

J:\workspace\codemgr\cmimpl\testmd5.cpp: In function ‘int main()’: J:\workspace\codemgr\cmimpl\testmd5.cpp:26:11: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 test(_stA{str,0,1});

它的意思大概就是_stA{str,0,1}这种用列表初始化结构的方式要在c++ 11标准中才支持。 initializer lists是c++11的特性 (参见 std::initializer_list(点击打开链接))

so,对于cmake生成的项目,我们就需要在CMakeLists.txt中添加如下编译选项

add_definitions(“-std=c++11”)

或者

add_definitions(“-std=gnu++11)

然后重新生成makefile,编译警告就消失了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档