func(QWidget* const &widget) VS func(QWidget* const 小部件)
func(QWidget* const &widget) VS func(QWidget* const widget)
我注意到即使丢弃 ampersand/reference 信号也能正常工作。
QWidget* widget;
func(widget);
下列表达的意思相同吗?
func(QWidget* const &widget)
func(QWidget* const widget)
我理解两者都是不能修改的指向可以修改的东西的指针。
注重两者实际效果的回答会更有价值。
从右到左阅读定义:
第一种意思是:widget是一个指向QWidget对象的const指针的引用
QWidget* const &widget
第二种意思: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
}
我注意到即使丢弃 ampersand/reference 信号也能正常工作。
QWidget* widget;
func(widget);
下列表达的意思相同吗?
func(QWidget* const &widget)
func(QWidget* const widget)
我理解两者都是不能修改的指向可以修改的东西的指针。
注重两者实际效果的回答会更有价值。
从右到左阅读定义:
第一种意思是:widget是一个指向QWidget对象的const指针的引用
QWidget* const &widget
第二种意思: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
}