Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是C++;习语应该是C++;程序员使用什么? P+C++程序员应该知道哪些C++习语? P> C++的成语,指的是设计模式或做某些事情的方式,这些东西只适用于C++或更适用于C++的语言,比大多数其他语言都适用。 为什么要使用成语,成语又是什么呢?< /P> < pimpl,Ak>强> P >强> > IMPL>强/ > EM>。 < P>迄今为止,学习和知道C++几乎唯一的“模式”是(资源获取是初始化)。_C++_Design Patterns_Idioms_C++ Faq - Fatal编程技术网

什么是C++;习语应该是C++;程序员使用什么? P+C++程序员应该知道哪些C++习语? P> C++的成语,指的是设计模式或做某些事情的方式,这些东西只适用于C++或更适用于C++的语言,比大多数其他语言都适用。 为什么要使用成语,成语又是什么呢?< /P> < pimpl,Ak>强> P >强> > IMPL>强/ > EM>。 < P>迄今为止,学习和知道C++几乎唯一的“模式”是(资源获取是初始化)。

什么是C++;习语应该是C++;程序员使用什么? P+C++程序员应该知道哪些C++习语? P> C++的成语,指的是设计模式或做某些事情的方式,这些东西只适用于C++或更适用于C++的语言,比大多数其他语言都适用。 为什么要使用成语,成语又是什么呢?< /P> < pimpl,Ak>强> P >强> > IMPL>强/ > EM>。 < P>迄今为止,学习和知道C++几乎唯一的“模式”是(资源获取是初始化)。,c++,design-patterns,idioms,c++-faq,C++,Design Patterns,Idioms,C++ Faq,编辑:(回答编辑到问题中的额外问题)。您使用RAII主要是(半)自动化资源管理。最明显的用途是当拥有的对象超出范围时释放对象拥有的资源,例如释放内存或关闭文件。模板元编程。这很好,因为它基本上是编译时的duck类型,所以您可以以静态类型的速度获得duck类型的大部分灵活性。如果您想充分利用STL,那么迭代器和函子/函数对象是基本的习惯用法。迭代器的使用也隐含地依赖于“半开范围”习惯用法。这里有一个。如果我必须选择一对,我可能会选择奇怪的重复模板模式或虚拟contstructor。RAII、COW

编辑:(回答编辑到问题中的额外问题)。您使用RAII主要是(半)自动化资源管理。最明显的用途是当拥有的对象超出范围时释放对象拥有的资源,例如释放内存或关闭文件。

模板元编程。这很好,因为它基本上是编译时的duck类型,所以您可以以静态类型的速度获得duck类型的大部分灵活性。

如果您想充分利用STL,那么迭代器和函子/函数对象是基本的习惯用法。迭代器的使用也隐含地依赖于“半开范围”习惯用法。

这里有一个。如果我必须选择一对,我可能会选择奇怪的重复模板模式或虚拟contstructor。

RAII、COW、pimpl、demeter定律(不确定是否可以归类为惯用语)、类型特征和策略。(DEMTER的COW和DENTE不限于C++)

< P>利用强类型和 COST> < /代码>正确性也非常有用。

我还禁止默认的复制构造函数和赋值运算符。事实上,我不止这些,但这些是最常见的。我认为如果它们不是隐式的,生活会更容易。

你能用那么多其他语言来做RAII和PIMPL吗?你不需要非GC语言来做这件事,比如C#和常见的
使用(A A=new A()){…}
利用
IDisposable
@gf。对。但是这仅仅比使用try{}catch{}finally{}实现RAII更漂亮。RAII应该不要求对象的用户执行任何操作。C++与RAII有着联系,就是把正确的用法的响应推到类的设计者而不是类的用户。@马丁:好点,不知怎么我不认为设计的实施是RAII的属性。我不认为C的使用语句是RAII的例子。问题是,你仍然不能让对象管理资源,这是RAII的重点,你仍然必须在创建对象时手动操作,你只需要得到一些语法糖分,使它看起来更漂亮。+1。不幸的是,这个成语也有最坏的名字;不要误解我的错误,它是C++中更重要的一个,但它甚至不接近C++的唯一性。虽然C++使它出名了,但我认为它不是C++独有的东西。更确切地说,它是关于C++中无处不在的事物;有些东西你不知道就无法通过,你可能用其他语言也能做到。RAII肯定是这样的一个。RAII是实现释放模式的C++方式。C++因为它在GC语言中没有出现内存泄漏而使它出名,而内存是迄今为止最明显的资源。不幸的是,这意味着不知道这个习惯用法的人在管理数据库连接或套接字等方面有困难。。。“使用”结构在我看来是迟钝的,因为它给每个用户而不是唯一的类编写器带来了负担:/我个人讨厌它/从技术上讲,您不必在任何地方使用它。:-)不幸的是,二进制兼容性有时是重要的,它是唯一可行的方法来保证它。它也显著减少编译时间(通过减少显式依赖),上帝知道C++程序员是如何遭受的。另一方面,如果没有很长的编译时间,我们中的许多人将无法在StackOverflow上花费同样多的时间。非常正确!你听说过序列构造函数和转换构造函数吗?你是说像
iota()
?列表中的另一个遗漏是生成器对象。老实说,我不熟悉iota(),但我已经发布了一个带有示例的答案。Ducks不能被录制。duck键入+1。我一直认为duck-typing是SFINAETraits的运行时版本,这是我在其他任何地方都没有见过的东西(但我也没有那么努力地寻找);然而,奇怪的是,重复出现的模板在我的列表中将非常低,因为每个C++程序员都需要知道。我可能误解了这个问题,但我认为它独特地提到C++和CRTP似乎在这方面是有条件的。