1
6
以安全的方式返回添加的元素或容器成员函数中的容器是不可能的。STL容器主要提供 "strong guarantee" . 退回被操纵的元件或容器将使其无法提供强有力的保证(它只提供“基本保证”)。 这背后的原因是,返回某些内容可能会调用复制构造函数,这可能引发异常。但函数已经退出,所以它成功地完成了它的主要任务,但仍然抛出了一个异常,这违反了强保证。你可能会想:“那么,让我们参考一下!”虽然这听起来是一个很好的解决方案,但也不完全安全。请考虑以下示例:
但是,如果拷贝分配操作符抛出,我们就不知道push-back是否成功,从而间接违反了强保证。即使这不是直接违反。当然使用
相当相似
reasoning
背后的事实是
编辑: 如果迭代器类型的复制构造函数提供了不抛出保证(我所知道的每一个都提供了),那么为新添加的元素返回迭代器应该是完全安全的。 |
2
5
有趣的问题。显而易见的返回值是操作发生的向量(或其他向量),因此您可以编写如下代码:
我个人不喜欢这种风格,但我想不出一个不支持它的好理由。 |
3
3
因为有.back()可以立即为您返回?
从概念上讲,C++设计器不会在成员函数中实现任何难以或不可能在公共接口中实现的任何功能。调用.back()非常简单。对于迭代器,可以执行(end-1)或
标准委员会使新代码成为可能,并大大简化了非常常用的代码。像这样的事情不在清单上。 |
4
2
相当于通过返回迭代器将\推回。为什么push-back本身不返回迭代器超出了我的能力。 |
5
0
我认为这与回报值的概念有关: 返回值的存在并不是为了您的方便,而是为了“计算”的概念结果,他们显然认为从概念上讲,“推回”不会产生任何结果。 |
6
0
我不确定,但我认为变异的原因之一
这个
如果您获得一个非常量迭代器
但是,在字符串突变操作之后,得到的字符串对象已经拥有数据的唯一所有权,因此字符串实现不需要再次泄漏其数据来生成非常量迭代器。
一
注:我有这个术语
泄漏
从libstdc++实现
编辑:
以下是libstdc++的定义
|
7
0
也许是因为它不是“需要”?
我看不出一个很好的理由来支持同样的逻辑
当然,做更多的神秘表达会很好。(我看不到您的示例有什么改进,这看起来是一个很好的方法,可以让您的同事在阅读代码时放慢速度…) |
8
-2
不确定他们有很好的理由,但是这个功能已经足够慢了。 |
Kevin Furlong · 类型转换和泛型 6 年前 |
Oleg Volkov · T-SQL存储过程结果转换为变量 6 年前 |
Jmainol · 获取选项标记值y传递到数组中 7 年前 |
Shiranai · 使用指针在C中的一个函数中返回多个值 7 年前 |
Kayote · 函数是否总是返回值[重复] 7 年前 |
user3723688 · python导入csv函数 7 年前 |