只能说这里确实存在一些二义性
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f16.png?t=20140803)
在godbolt上试了一下,gcc14和clang19的报错就很明确:与函数声明混淆,然后推荐你把圆括号换成花括号
![](http://tiebapic.baidu.com/forum/w%3D580/sign=f3d8cd0fc101a18bf0eb1247ae2f0761/b87d11dfa9ec8a131b2b1cc3b103918fa0ecc0b6.jpg?tbpicau=2025-03-01-05_e2a2bfddf84aa93458c29f66238ab196)
代码链接:
https://godbolt.org/z/c1hE8vsda用花括号代替圆括号进行变量初始化确实是个好习惯,但是话又说回来,构造函数里有参数是初始化列表的重载又会产生新的混淆,最典型的例子就是std::vector<int>{3, 1}和std::vector<int>(3, 1),前者构造的vector包含{3, 1}两个元素,后者则是{1, 1, 1}三个元素
很讨厌,但没啥好办法,只能踩过坑了以后自己多注意一点
![](https://tb2.bdstatic.com/tb/editor/images/face/i_f12.png?t=20140803)