需要解释C++代码

waj*_*jed 4 c++

namespace Stack {
  struct Rep; // definition of stack layout is elsewhere
  typedef Rep& stack;
  stack create(); // make a new stack
  void destroy(stack s); // delete s
  void push(stack s, char c); // push c onto s
  char pop(stack s); // pop s
}
Run Code Online (Sandbox Code Playgroud)

这是在"A Tour of C++"单元中,甚至在函数,循环和基本数据类型之类的基本材料之前......我不知道是否/我应该如何理解这段代码.

无论如何,有人可以解释一下吗?它应该是如何"使用接口定义堆栈管理器"的解释的一部分

首先,我特别不知道" typedef Rep& stack"是什么意思.

Joh*_*itb 7

简而言之,stack是一个typedef,用于引用该类型Rep.这意味着,无论何时使用stack,都表示"对Rep的引用"类型.

在我看来,这是一个奇怪的C++课程材料.从界面的外观来看,我们可以假设实现类似于

/* in darkcorner.cpp: */


stack create() { // make a new stack
  stack s = *new Rep;
  return s;
}

void destroy(stack s) { // delete s
  delete &s;
}

void push(stack s, char c) { // push c onto s
  s.push(c);
}

char pop(stack s) { // pop s
  return s.pop();
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您执行以下操作,则违反了大多数C++程序员的最小惊喜原则.

stack p = create();
stack p2 = p;
Run Code Online (Sandbox Code Playgroud)

"最少惊喜的原则"说这将复制堆栈.但实际上,stack代表类型Rep&,这是"对Rep的引用".这意味着第二行创建了一个别名p(引用引用的内容p).它不会复制,只是创建另一个引用.

我建议你:不要这样的代码.如果要隐藏实现或布局Rep,请实现Pimpl习语.