3

有没有办法在 C++ 中缩写表达式?例如,如果我有这样的事情

ui.myplot->graph(0)

我想把它缩写为mygraph, 这样就不会像这样

int a =   ui.myplot->graph(0)->val;

我可以这样做

int a = mygraph->val;

我知道 typedef 不会在这里工作。有什么建议么 ?

4

3 回答 3

2

使用参考:

const auto& mygraph = ui.myplot->graph(0);

或者如果您需要更改值,则使用可变引用:

auto& mygraph = ui.myplot->graph(0);

引用被设计为用作别名;这在参数传递中最常出现的事实有点误导。它们也可以在本地用于为复杂表达式的结果设置别名,例如对象的深度嵌套字段。

于 2013-08-09T06:52:56.023 回答
1

我假设您将 Qt 与 Designer 和 UI 文件一起使用,因为您显示的代码使用 Qt 范例。

在您的班级中放置一个Graph* mygraph成员,并将其设置为指向您的图表(0):

MyClass {
  Q_OBJECT
public:
  Graph* mygraph;
  MyClass();
}

在构造函数中,在ui->setupUI(this):

MyClass::MyClass()
{
  ui->setupUi(this);
  mygraph = ui.myplot->graph(0);
} 

现在你可以在你的类方法中使用它了。

int MyClass::getValue()
{
  int a = mygraph->val();
  return a;
}
于 2013-08-09T07:05:15.340 回答
0

毫不犹豫地定义局部变量。它们对于提高可读性非常方便,如果不使用 -O0 编译,它们将被编译器(引用或实际变量)优化掉(在最后一种情况下,我不确定优化行为)

int a =   ui.myplot->graph(0)->val;

变成

auto& myParticularGraph = ui.myplot->graph(0);
int a =   myParticularGraph->val;

现在myParticularGraph就像一个“别名”ui.myplot->graph(0)

于 2013-08-09T07:35:35.400 回答