缩写标识符的表达式

时间:2013-08-09 06:50:40

标签: c++

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

ui.myplot->graph(0)

我希望将其缩写为mygraph,这样就不会像这样了

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

我能做到这一点

int a = mygraph->val;

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

3 个答案:

答案 0 :(得分:2)

使用参考:

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

如果您需要更改值,则为可变参考:

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

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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

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

变为

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

现在myParticularGraph就像是ui.myplot->graph(0)

的“别名”