需要对C++代码进行解释
Need explanation for C++ code
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
}
这是在"C++之旅"单元中,甚至在函数、循环和基本数据类型等基本材料之前。。。我不知道我是否/如何理解这个代码。
不管怎样,有人能解释一下吗?它应该是解释如何"定义一个具有接口的堆栈管理器"的一部分
首先,我特别不知道"typedef Rep& stack
"是什么意思。
stack
是引用类型Rep
的typedef。这意味着,无论何时使用stack
,都表示类型"referencetoRep"。
在我看来,这是一个奇怪的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();
}
现在,如果你做了以下操作,你就违反了大多数C++程序员最不意外的原则。
stack p = create();
stack p2 = p;
"最小惊喜原则"规定,这将复制堆栈。但实际上,stack
代表类型Rep&
,它是"对Rep的引用"。这意味着第二行创建了p
的别名(参考p
所指的内容(。它不复制,只是创建另一个引用。
我建议你:远离这样的代码。如果要隐藏Rep
的实现或布局,请实现Pimpl习惯用法。
typedef Rep& stack
表示stack
将是Rep&
的同义词。所以不是
Rep &r;
你可以写
stack r;
更新:Rep &r
表示r
是对类型为Rep
的对象的引用。
例如:
Rep rep; // object of type (class) Rep
Rep &ref = rep; // reference to rep
顺便说一句。我不喜欢你发布的代码。
typedef
仅仅把某个东西作为参考并不是一个好主意;应该清楚地看到某个东西是指针或引用,因为它的行为方式与它看起来的方式大不相同。push()
和pop()
应该是Rep
类的方法(或更好的Stack
(,或者它是比C++更多的C代码:(内存管理;您必须注意,对于从
create()
获得的每个堆栈,都会调用destroy()
。通常使用智能指针来确保正确的内存管理。
您在一个名为"Stack"的命名空间中,这样可以防止您声明的所有符号都是全局的,并可能与其他符号发生冲突。
struct Rep
是一个正向声明,它表示在其他地方正确定义了一种名为Rep的结构类型,即使您不知道它在这里有什么布局,也会引用它。
CCD_ 24使"stack"成为"Rep&"的同义词,正如梅萨已经回答的那样。所以无论你在哪里写"stack",它都和写"Rep&"一样。Rep &
表示对"Rep"类型结构的引用。即使不知道Rep的完整定义,引用的大小也是已知的,因此转发声明不是问题。
剩下的四行声明的函数大概将执行名称建议的操作,如注释中所述。
这是一种向C程序员展示C++对象如何形成的方法;namespace Stack { struct Rep; }
将为您提供一个类似于执行class Stack { struct Rep;}
的Stack::Rep
项目/对象。如果您不熟悉C和名称空间,那么在本书的开头,这似乎是一个奇怪的例子。
无论如何,这是我最好的猜测,因为当我在使用C一段时间后第一次看到它时,我意识到"哦,对象就是这样产生的。它们是名称空间,在编译器中添加了一些额外的乐趣!">
typedef Rep& stack
表示在命名空间Stack
中,如果使用stack
,则表示其类型为Rep&
。这就像给一个单词指定一个类型。
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 有人能为我解释一下C++代码吗
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以解释一下这段代码如何能够反转字符串
- 有人可以向我解释一下这段代码的作用吗?
- 有人可以详细解释这个回文代码是如何工作的吗?
- 如何在 C++11 中解释静态代码
- 任何人都可以解释一下我是否需要 & 在第一个代码片段中
- 我不完全确定此代码的行为.有人可以向我解释一下吗?
- 有人可以解释我这个代码吗?它给出与我们输入的数字相反
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 解释以下宏代码的 O/P
- 如何解释 IDA Pro 生成的这些代码?
- 交叉和计算,任何人都可以解释代码吗?
- 请解释代码块"for(auto &it : iostr )"
- 需要解释C++代码的行为
- 解释C++代码
- 二叉搜索树的最低公共祖先解释代码
- 任何人都解释C++代码行
- 需要知道为什么代码以这种方式行为- C中的解释代码