gpt4 book ai didi

c++用花括号声明对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:24 27 4
gpt4 key购买 nike

在 C++ 中声明对象时 -

有什么区别

MyClass myObj (a,b,c);

(我理解为调用带三个参数的构造函数)

对比

MyClass myObbj{a,b,c};

不确定这里的大括号是什么意思?

作为引用,我使用以下代码

// Inertial Navigation EKF
NavEKF EKF{&ahrs, barometer, sonar};
AP_AHRS_NavEKF ahrs{ins, barometer, gps, sonar, EKF};

1.是否使用大括号NavEKF EKF{&ahrs, 气压计, 声纳}; c++标准的一部分。 gcc 4.6.1 提示 - 函数定义没有声明参数。

2。鉴于AP_AHRS_NavEKF ahrs;

AP_Baro 气压计;

测距仪声纳;

2A。为什么编译器会提示这个

NavEKF EKF(&ahrs,气压计,声纳);

但允许这样做

NavEKF EKF(AP_AHRS_NavEKF &ahrs,AP_Baro 气压计,RangeFinder 声纳);

最佳答案

基本意图是它们通常指的是同一件事。最大的区别是花括号消除了您试图定义对象但最终实际上声明了一个函数的“最令人烦恼的解析”。

因此,NavEKF EKF{&ahrs, barometer, sonar}; 通常 等同于 NavEKF EKF(&ahrs, barometer, sonar);。但是,如果您有类似的东西:NavEKF EKF();NavEKF EKF{}; 它们是不同的——NavEKF EKF(); 声明了一个名为 EKF 的函数,该函数不接受任何参数并返回一个 NavEKF,而 NavEKF EKF{}; 执行您(可能)通常期望的操作,并创建一个类型为 NavEKF 的名为 EKF 的默认初始化对象。

但是,在某些情况下,对于如何解释事物存在歧义,并且根据您是使用圆括号还是大括号,歧义的解决方式也不同。特别是,如果您使用花括号,并且有任何方法可以将内容解释为 initializer_list,那么它就会被解释。当且仅当失败,所以它不能被视为一个 initializer_list,它会寻找一个重载,将大括号中的元素作为参数(在这一点上,你得到正常的重载决议,所以它基于最合适,而不仅仅是“它可能被解释为完全合适吗?”)

关于c++用花括号声明对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34007862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com