Questions tagged «c++-faq»

提供协作式,社区编辑的C ++常见问题解答

16
返回C ++参考变量的做法是否有害?
我认为这有点主观;我不确定这种意见是否会一致(我已经看到很多返回引用的代码段)。 根据我对这个问题的评论,关于初始化引用,返回引用可能是邪恶的,因为(据我所知),因为它更容易错过删除它,这可能导致内存泄漏。 这让我感到担心,因为我遵循了示例(除非我在想象中的事情),并且在相当多的地方进行了此操作……我是否误解了?是邪恶的吗?如果是这样,到底有多邪恶? 我觉得由于我的指针和引用混合在一起,再加上我是C ++的新手,再加上对何时使用什么的完全困惑,我的应用程序一定是内存泄漏地狱... 另外,我了解使用智能/共享指针通常被认为是避免内存泄漏的最佳方法。
341 c++  reference  c++-faq 


2
如何在现代C ++中实现经典的排序算法?
在大多数实现中,C ++标准库中的std::sort算法(及其表亲std::partial_sort和std::nth_element)是更多基本排序算法(例如选择排序,插入排序,快速排序,合并排序或堆排序)的复杂混合混合。 在这里以及在姐妹网站(例如https://codereview.stackexchange.com/)上,存在许多与这些经典排序算法的错误,复杂性和实现的其他方面有关的问题。提供的大多数实现都是由原始循环,使用索引操作和具体类型组成的,并且从正确性和效率方面来说,通常都是不平凡的分析。 问题:如何使用现代C ++实现上述经典排序算法? 没有原始循环,但结合了标准库的算法构建块<algorithm> 迭代器接口和模板的使用,而不是索引操作和具体类型的使用 C ++ 14样式,包括完整的标准库以及语法降噪器,例如auto,模板别名,透明比较器和多态lambda。 注意事项: 有关排序算法实现的更多参考,请参见Wikipedia,Rosetta Code或http://www.sorting-algorithms.com/ 根据Sean Parent的约定(幻灯片39),原始循环是-循环,for比使用运算符将​​两个函数组成更长。So f(g(x));or f(x); g(x);or f(x) + g(x);不是原始循环,也不是内部selection_sort和insertion_sort下面的循环。 我遵循Scott Meyers的术语将当前的C ++ 1y表示为C ++ 14,并将C ++ 98和C ++ 03都表示为C ++ 98,所以不要为此而烦恼。 正如@Mehrdad的评论中所建议的那样,我在答案的末尾提供了四个作为实时示例的实现:C ++ 14,C ++ 11,C ++ 98和Boost和C ++ 98。 答案本身仅用C ++ 14表示。在相关的地方,我表示的是各种语言版本不同的语法和库差异。






3
构造函数初始化列表评估顺序
我有一个带有一些参数的构造函数。我以为它们是按照列出的顺序构造的,但是在一种情况下,看来它们是反向构造的,从而导致中止。当我反转参数时,程序停止中止。这是我使用的语法示例。事实是,在这种情况下,a_需要在b_之前初始化。能保证施工顺序吗? 例如 class A { public: A(OtherClass o, string x, int y) : a_(o), b_(a_, x, y) { } OtherClass a_; AnotherClass b_; };
252 c++  gcc  c++-faq 

7
如何将对象传递给C ++中的函数?
我是C ++编程的新手,但是我有Java的经验。我需要有关如何将对象传递给C ++函数的指导。 我是否需要传递指针,引用或非指针和非引用值?我记得在Java中没有这样的问题,因为我们只传递了保存对对象的引用的变量。 如果您还可以解释在哪里使用这些选项,那就太好了。

4
什么时候使用点,箭头或双冒号来引用C ++中的类成员?
从其他C来源的语言(如Java或C#)到C ++到来,这是起初很困惑的是C ++有三种方式来引用类的成员:a::b,a.b,和a->b。什么时候使用这些运算符中的哪一个? (注意:这本来是Stack Overflow的C ++ FAQ的一个条目。如果您想批评以这种形式提供FAQ的想法,那么在所有这些都开始的meta上的张贴将是这样做的地方。该问题在C ++聊天室中进行监控,该问题最初是从FAQ想法开始的,所以提出这个想法的人很可能会读懂您的答案。)
243 c++  c++-faq 

14
指向类数据成员“ :: *”的指针
我遇到了一个编译正常的奇怪代码段: class Car { public: int speed; }; int main() { int Car::*pSpeed = &Car::speed; return 0; } 为什么 C ++具有指向类的非静态数据成员的指针?什么是使用真正的代码,这个奇怪的指针?
242 c++  class  pointers  c++-faq 

1
std ::洗钱的目的是什么?
P0137引入了功能模板, std::launder并在有关并集,生存期和指针的部分中对标准进行了许多更改。 本文要解决的问题是什么?我必须了解的语言有哪些变化?那我们在做launder什么?


3
什么是“ * this的右值参考”?
在clang的C ++ 11状态页面中遇到了一个名为“ * this的右值引用”的提案。 我已经阅读了很多有关右值引用并理解它们的知识,但我认为我对此并不了解。使用这些条款,我在网络上也找不到太多资源。 该页面上有一份建议书链接:N2439(将移动语义扩展到* this),但我从那里也没有太多示例。 这个功能是关于什么的?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.