C++代码中vector变量声明被误识别为函数声明如何解决?
问题原因
这个是C中臭名昭著的**最令人头疼的解析(Most Vexing Parse)**问题:C语法规则规定,只要某条语句能够被解释为函数声明,编译器就会优先将其判定为函数声明,而非变量定义。
你写的语句会被编译器解读为:
声明返回值为
vector<extend_t>类型、名为newExtends的函数,该函数接收1个extend_alloc_t类型、名为alloc的参数。
解决方法
- 方案1:C++11及以上版本优先使用统一列表初始化(最推荐)
用花括号替代构造调用的圆括号,从语法上杜绝被识别为函数声明的可能:vector<extend_t> newExtends{ extend_alloc_t(alloc) }; - 方案2:给构造参数额外包裹一层圆括号(兼容C++03及更早标准)
函数参数声明不允许额外的括号包裹类型,添加括号后编译器就会将其判定为变量定义:vector<extend_t> newExtends( (extend_alloc_t(alloc)) ); - 方案3:C++11及以上版本使用拷贝初始化写法
显式指定类型配合auto关键字,写法清晰无歧义:auto newExtends = vector<extend_t>( extend_alloc_t(alloc) );
内容的提问来源于stack exchange,提问作者Bonita Montero
相关产品推荐
相关产品推荐

