万能的社区请赐我一个昵称吧 2024-07-25 19:04 采纳率: 42.9%
浏览 3

关于C++对于圆括号的解释

关于C++中对于括号解释的问题。

如果有:
    vector<string> ar01;//创建一个名为ar01的vector<string>空数组,没有任何元素。
    vector<string>();//创建一个无名的vector<string>空数组,为临时数组,没有任何元素。
那么:    
vector<string> (ar01);//这个怎么解释????
//使用对象ar01,调用复制构造函数构造一个无名的vector<string>空数组?
//强制类型转换??

C++对于括号的解释有时真的感到混乱。
然而以上的解释都不对,编译器将其解释为仅仅在vector ar01基础上添加了一个圆括号,仅此而已,和vector ar01意义相同,所以导致ar01重定义,编译错误。
哪位同学阐述一下编辑器对于圆括号的解释。

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-25 19:04
    关注

    引自免费微信小程序:皆我百晓生

    你的疑问关于C++中括号的使用是非常合理的。关于 vector<string> (ar01) 这个表达式,确实容易引起混淆。

    在C++中,括号有多种用途,它们可以表示多种不同的操作或含义。在你给出的例子中,括号的主要作用是进行函数调用或构造函数的初始化。对于 vector<string> ar01,这是一个声明语句,表示创建了一个名为ar01的vector<string>类型的对象。

    然而,对于 vector<string> (ar01) 这种形式,它实际上并不符合C++的语法规则。在C++中,括号在声明语句中不能直接用于对象的名称,这就是为什么它会引起编译错误的原因。你提到的“强制类型转换”在这种情境下并不适用,因为这里并没有进行任何类型转换的操作。在这种情况下,括号更像是一个表达式的一部分,但是它并不能直接与对象名称一同使用。这可能是导致你困惑的地方。

    如果你想要创建一个新的vector对象并初始化它,你应该使用赋值操作符或者其他方式来实现。例如:

    vector<string> ar01; // 声明并初始化一个名为ar01的vector对象
    vector<string> anotherVector = ar01; // 创建另一个新的vector对象,并使用ar01来初始化它
    

    在上面的例子中,anotherVector就是通过使用ar01来初始化的一个新的vector对象。不过要注意,如果直接使用括号与对象名称放在一起,例如 vector<string> (ar01),这在C++中是不合法的。括号在这里并没有特殊的含义,它们仅仅是括号本身,不能用于对象的声明或初始化。希望这个解释能够帮助你理解C++中括号的使用。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月25日

悬赏问题

  • ¥100 or-tools的相关问题
  • ¥30 怎么烘焙完整模型的法线
  • ¥15 为什么提交不了?接口测试都是对的
  • ¥15 有可能用平板通过拓展坞来烧录程序吗(keil5的那种)
  • ¥15 网络分析设施点无法识别,网络构建部分有效
  • ¥15 状态图的并发态问题咨询
  • ¥15 PFC3D,plot
  • ¥15 VAE模型编程报错无法解决
  • ¥100 基于SVM的信息粒化时序回归预测,有偿求解!
  • ¥15 物体组批优化问题-数学建模求解答