【发布时间】:2019-04-05 03:11:20
【问题描述】:
问题:
-
我使用 cppreference.com 上描述的模板来指导我实现一些功能,例如 push() (在我的例子中是enqueue() )。在 cppreference.com 上,给出了以下模板:
(a) push(const value_type & value); (b) push(value_type && value);
https://en.cppreference.com/w/cpp/container/queue/push
由于 (a) 需要引用,文字是如何添加到队列中的?
另外,如果我实现一个函数
enqueue(Queue const & other)
使用函数
enqueue(T const & value)
通过迭代“其他”并将每个值排入“其他”中,这不会添加“其他”中值的“深层”副本吗?因此,我不应该传递对其他的引用,而是传递一个副本?
另外,“&&”是什么意思?
-
这两个功能如何
(a) const T & front() const (b) T & front()
由编译器区分?此外,(a) 在函数名后有一个 const 意味着外部用户将无法修改前面的变量?您甚至想修改队列的前端(或结束)变量吗?
感谢您的宝贵时间!
【问题讨论】:
-
问题最好是每个问题一个问题。 1 和 2 适合在这里问,甚至在同一个问题中,3 到 6 更适合Code Review。是的,我确实故意链接到“如何提问”帮助页面。
-
这就是说你所拥有的东西看起来不错。我不会在队列上实现随机访问
[]运算符。队列只允许在一端插入并从另一端提取,因此随机访问不会排队。 -
嘿,user458。感谢您的反馈意见。我将浏览该页面。我确实考虑过将问题分开。但是,在几个单独的帖子上发布我的代码感觉很乏味。此外,我认为我已将我的问题标记为“代码审查”。对不起,因为我没有!再次感谢:)
-
我现在意识到代码审查是一个完全独立的论坛(对不起)。
-
不用担心。松散的经验法则是在这里放行不起作用的代码。确实有效但可以更好地工作的代码进入代码审查。关于 2)
value_type && value的注释是 forwarding reference(有时称为通用参考)。大多数情况下,您会在ownership 与std::move的传输中找到这些。