![]() |
1
29
关键的区别在于,这两个操作实际上在语义上并不相同。
第一个意思是离开
此外,每个操作可能对所讨论的类型有不同的约束。如果我们将它们转储到一个函数中,“两个分支”将必须满足相同的约束,这是不必要的限制。C++17和
最终,我认为这个设计符合ScottMeyers的建议。如果默认参数让您执行语义不同的操作,则可能是另一个重载。
好的,来解决你的编辑问题。是的,例外规范不同。但正如我之前提到的
原因
它们可以不同,就是功能在做不同的事情。这个
semantics of the
那里没有什么新闻快讯。每个函数都具有构造新
请注意指针使用计数上的不同post条件。这意味着第二个过载需要考虑任何内部簿记。并很可能为其分配存储。这两个重载构造函数做不同的事情,正如我前面所说的,这是将它们划分为不同函数的强烈提示。事实上,我们可以得到更有力的例外保证,这进一步证明了设计选择的合理性。
最后,为什么
|
![]() |
2
7
如果您经常重置为
当然,如果函数被多次调用,这两者都不重要。 异常行为也存在差异,这可能非常重要,我认为这就是为什么标准有多个此函数声明的动机。 |
![]() |
3
6
虽然其他答案的设计选择都是有效的,但它们确实假设了一件在这里并不完全适用的事情:语义等价!
第一个过载是
关于不同原因的一些背景信息
|
![]() |
4
3
重载和默认指针之间有一个根本区别:
因此,从语义上讲,默认值是嵌入在调用代码中的捷径,而重载是嵌入在被调用代码中的含义。 |