关于std::unique_lock括号声明导致编译Bug的技术咨询
踩坑:C++中容易被忽略的括号语法陷阱
今天写代码时碰到个棘手的Bug,我不小心写出了这样的代码:
std::unique_lock<std::mutex> (some_mutex);
注意这里缺少了变量标识符!
当时我以为这肯定会编译报错,结果没想到它居然顺利通过了编译!后来仔细排查才发现,这行代码实际上等效于:
std::unique_lock<std::mutex> some_mutex;
也就是说,我在当前作用域里创建了一个和外部同名互斥量some_mutex重名的、默认构造的unique_lock对象——这完全不是我想要的效果!
查了相关语法才明白,C++允许在类型标识符外面加括号,这是为了适配函数指针的语法场景。我一开始还以为这只是个手滑的小问题,分分钟就能修复,结果没想到是这种容易被忽略的语法特性在挖坑,真是吃了个大亏!
内容的提问来源于stack exchange,提问作者HenrikS
相关产品推荐
相关产品推荐

