func(QWidget* const &widget) VS func(QWidget* const widget)
func(QWidget* const &widget) VS func(QWidget* const widget)
我注意到即使丢掉&号/引用信号,代码也能正常工作。
QWidget* widget;
func(widget);
下列表达式的意思相同吗?
func(QWidget* const &widget)
func(QWidget* const widget)
我理解它们都是指针,不能被修改成可以修改的东西。
从右至左阅读定义:
第一个意思是:widget是一个指向QWidget对象的const指针的引用
QWidget* const &widget
小部件是指向QWidget对象的const指针
func(QWidget* const widget)
当然不一样。
两个定义都有效,因为编译器会自动取消引用。
单个&符号表示一个左值引用-一个值的引用,该值在您使用它的表达式之外持续存在;可以取其地址的值。
实际的结果是,如果你传递一个右值(例如一个字面量),代码将无法编译:void func_lref(QWidget* const &widget);
void func_val(QWidget* const widget);
void test(QWidget* widget) {
func_val(widget); // OK, pass a copy of the widget parameter by value
func_lref(widget); // OK, pass an l-reference to the widget parameter
func_val(nullptr); // OK, pass a copy of nullptr by value
func_lref(nullptr); // won't compile, a literal can't be l-referenced
}
相关文章:
- 表观调用前面的表达式必须具有指向 func 类型的指针
- Widget&&rhs 是左值还是右值引用
- 不能在 if 语句 - c++ 中使用 void func 直接将字符串转换为大写
- 使用静态 qmake 的 QT Widget 插件
- 在扣除自动之前使用decltype(auto) <func>
- Understanding void func(A())
- DLL+导出类+模板成员func=未解析的外部符号.任何修复的机会
- 如何在派生类中不显式调用base::func()的情况下从基类执行虚拟函数
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 从 QT Widget 对象实例访问 QT Widget 子成员
- 为什么 decltype(declval()<T>.func()) 可以工作,而 decltype(&T::func) 不能工作?
- 是否可以交换在 c++ 中作为函数 func(say) 中的参数传递的 const 向量的两个元素,例如:vector<int>func (const vector<int>&
- C++,如何将返回值的函数传递给 func
- 派生类中的'using Base<T>::func()'使得派生类之外无法访问'func'
- 为什么无法在 Cocoa 应用程序调用的 C++ func 中嵌入自定义 Python 模块
- __extern_inline func导致未定义的参考错误
- 在扣除C++14中的"auto"之前使用"auto func(int)"
- 如何从另一个Qt Widget表单类调用MainWindow类
- 有没有办法查看此语句"Student s3=func(s1, s4)"将调用哪个构造函数?
- func(QWidget* const &widget) VS func(QWidget* const widget)