以 qreal 引用作为参数的语法
Syntax with qreal reference as a parameter
我正在使用Qt和C++,我似乎不理解一些对我来说不一致的东西。我有一个方法可以操作作为参数发送给它的变量,这是它的声明aManipulation(qreal& a); //reference to a qreal
我使用包含两个 qreal 值的QPointF
。该类可以通过一个方法返回一个qreal值,或者通过另一个方法返回一个引用qreal&。所以我对这些案例很好奇:
qreal value = 1;
QPointF point; point.setX(1);
//OK -- this works eventhough I don't send it as a qreal&
aManipulation(value);
//FAIL -- actually trying to send a qreal& reference is an error
aManipulation(value&);
//OK -- this method however returns a qreal&
aManipulation(point.rx());
//FAIL -- this just returns the '1' and I understand it cannot be referenced
aManipulation(point.x());
为什么将对象而不是对对象的引用发送到需要对象引用的方法就足够了?我很困惑,因为使用纯指针执行此操作会非常清楚。
当您将"值"传递给:
aManipulation(qreal& value)
{
}
通过说:
qreal myreal = 1.2;
aManimulation(myreal);
编译器实际上传递了对MyReal的引用,没有必要说'myreal&'(事实上,你不能)。
传递指针可能看起来更清晰,但参考方法更安全。您仍然可以获得将地址传递给某些内容(而不是整个内容)的好处,而不会有指针被修改的风险。
我认为代码也更干净。您不需要所有的"*"或将"const"放在正确的位置以防止指针被修改,同时仍然允许它指向的内容。
当我查看我的旧代码并传递所有指针时,它对我来说看起来很丑陋,但这是主观的。当然,有时您实际上想要传递指针(或指向指针的指针)。
相关文章:
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 将类作为主要参数的语法在哪里需要?
- 初始化对象以在 C++08 中作为参数传递的首选语法是什么?
- 当C++类函数参数之一是结构时,它们的语法有什么不同
- 将显式指定的函数模板重载作为模板参数传递的正确语法是什么?
- 提升::精神::qi::语法和可变参数模板
- C++ 中的默认参数语法和一般语法
- 带有约束的可变参数模板的'requires'表达式的语法是什么?
- C++ C 样式数组作为语法错误的参数
- 使用 MATLAB 语法的 c++ 函数参数?
- 在模板类中的参数包的语法
- 将QMETAMETHOD作为参数传递到使用新的Qobject :: Connect语法的函数
- 在Qt信号和插槽中使用lambda语法并访问传递的参数
- 是否可以在尾随返回类型语法中直接使用参数值(不是其类型,而是值本身)
- 精神语法不会编译:函数模板参数错误?
- 适用于全局模板运算符指定模板参数的适当语法
- hpp文件中的块,这是c ++语法吗?为什么没有传入参数?有人可以解释一下,请
- 有人能解释一下特殊的std::函数模板参数列表语法(这个奇怪的类型(Types..))吗
- 构件和模板参数语法上的指针
- 可变模板模板参数语法