临时容器对象上的迭代器

2023-12-02

假设我有一个按值返回 STL 容器的函数,例如 std::list

std::list<Foo> get_Foolist()
{
    std::list<Foo> lst;
    //populate lst
    return lst;
}

or

class SomeClass
{
    std::list<Foo> get_Foolist()
    {
        return m_foolst;
    }
    ...
    private:
    std::list<Foo> m_foolst;
};

现在,我有一段代码,它使用此函数来获取列表并按以下方式迭代它,

std::list<Foo>::iterator i = get_Foolist().begin();
//use i like ... cout << *i << endl;

当我看到这段代码时,我觉得它不应该工作,因为我们在临时对象上使用迭代器,该对象将在执行表达式后被删除。但是,令我惊讶的是它确实有效。

这适用于 STLPort5.2 和 Microsoft Visual Studio 2008。

后来,当我们删除 STLPort 并开始使用编译器提供的 STL 实现时,我们开始面临崩溃。

据透露,上面的代码不适用于 VS 2008 列表实现,但适用于 STLPort。

我尝试在其他各种编译器上运行它,结果如下,

  • Visual Studio 2008(没有 STLport5.2)- 崩溃
  • Visual Studio 2008(带 STLPort5.2)- 可以使用
  • Visual Studio 2013(没有 STLport5.2)- 崩溃
  • GCC 4.3.6(没有 STLPort5.2)- 可以使用
  • Clang 3.0(没有 STLPort5.2)- 可以使用

(GCC 和 Clang 是从http://melpon.org/wandbox/)

现在我的问题是,

  1. 哪种实现是正确的(根据标准)?
  2. 为什么它在 VS 以外的所有实现上都成功了?

  1. 哪种实现是正确的(根据标准)?

想必他们都是。

  1. 为什么它在 VS 以外的所有实现上都成功了?

It is 未定义的行为因为您正在取消引用无效的迭代器。因此它可能会以无数种方式失败。或者看起来有效,这只是另一种失败模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

临时容器对象上的迭代器 的相关文章

随机推荐

  • 在 Java Swing 中向 JPanel 添加按钮

    我将 JLabel 和 JCombobox 附加到 JPanel 这工作正常 但是当我向其中添加另外两个按钮时 我看不到这些按钮 下面是我的代码 JPanel jPanel new JPanel jPanel setLayout null
  • 从 ASP.NET Web API 中的控制器返回二进制文件

    我正在使用 ASP NET MVC 的新 WebAPI 开发一个 Web 服务 该服务主要提供二进制文件 cab and exe files 以下控制器方法似乎有效 这意味着它返回一个文件 但它将内容类型设置为application jso
  • 如何将原始 POST 数据传递到 urllib3 中?

    尝试使用 urllib3 发布 JSON 编码数据 只是希望我的 POST 有效负载是原始 JSON 字符串 内容类型为 application json 我只是不知道该怎么做 urllib3 文档描述了在 字段 中发布数据 即带有 键 值
  • 条件长度 > 1 并且 if else 语句中仅使用第一个元素

    pred data frame seq 1 100 by 2 obs data frame seq 1 100 by 3 pr data frame seq 1 200 by 4 for i in 1 dim pred 2 if pr i
  • 从 Pyscripter 中的函数调用时记录不写入文件

    目前 如果我从 python 命令行运行以下代码 它将写入由filename正如预期的那样 import logging def test logging basicConfig format asctime s message s dat
  • 带有 ManagedBeans 的 Primefaces 总是返回 null [重复]

    这个问题在这里已经有答案了 我有个问题 我有一个表格 通过将输入发送到 bean 进行调试 在 bean 对象中始终为 null 你能帮我解决这个问题吗 这里是代码
  • 代码仅从 Firebase 中的数据检索一个值

    正如标题所示 我正在尝试从 firebase 数据库检索一些数据 但我的代码无法正常工作 我在 帖子 中有三个孩子 我猜这就是你对他们的称呼 名为 标题 描述 和 用户名 我试图获取所有这些孩子并将它们附加到一个变量中以便稍后使用它们 但它
  • iCal 格式 - 存储事件创建者

    我目前正在编写一个大致基于 iCalendar 标准的日程安排应用程序 有谁知道我可以在哪个属性中存储活动创建者的信息 通过浏览 iCalendar RFC 2445 我找到了这个属性 组织者 即使活动创建者是唯一参与活动的人 我是否可以将
  • 内存布局意味着Go中[]T无法转换为[]接口?

    所以我一直在阅读这两篇文章和这个答案 无法将 string 转换为 interface 表示需要更改内存布局 http jordanorelli com post 32665860244 how to use interfaces in g
  • 如何在移动设备的 Facebook 即时游戏中创建 Phaser 按钮

    我正在尝试在移动设备上使用 Phaser 2 CE 创建一个按钮 但它不会触发 即使它在桌面上运行良好 整个代码也会打开我的 github 存储库但目前我只能显示一个图像 如下面的代码所示 var game new Phaser Game
  • PROLOG 打印以 7 结尾且其数字之和大于 100 的数字

    我需要创建一个谓词来接收数字列表并仅打印以 7 结尾且其数字之和大于 100 的数字 我为分离做了谓词 但我需要帮助将两个谓词合并起来 我的意思是这两个谓词进入一个唯一的谓词 这就是我到目前为止所做的 sum of digits great
  • 如何导入 java 的 multimap?

    这有点愚蠢 但我该如何安装MultiMap 我需要一种将多个值存储到键的方法 但我的地图实现无法正常工作 那堂课 MultiMap 不是 Java 标准库的一部分 它是一部分阿帕奇共享区 一组独立的实用程序类 许多 Java 开发人员认为很
  • 如何使用非树数据创建 d3.js 可折叠力布局?

    我有一个 d3 力定向布局 其中的数据具有下面类似的结构 是否可以应用可折叠力布局 例如http bl ocks org mbostock 1062288到它 我希望单击时折叠 展开节点 nodes x 469 y 410 x 493 y
  • Java 8:使用字符串的字符数创建 HashMap

    想知道是否有比计算给定字符串的字符数更简单的方法 如下所示 String word AAABBB Map
  • 表单获取方法:防止在查询字符串中提交空字段

    我正在开发一个搜索表单 搜索表单有 2 个部分 首先使用一些选择 输入和提交按钮进行简单搜索 第二个包含许多选择 复选框 单选 输入和提交按钮 我正在使用 GET 方法 因为我想要查询字符串中的所有字段 example com cars p
  • 创建一个新分支

    我想创建新分支 B 目前 我有一个主分支 本地和远程 和功能分支 A 本地 功能分支 A 已在远程删除 另外 我的本地功能分支中有一些已提交的文件和未暂存的文件 我想去master在不丢失任何更改并创建另一个分支的情况下 先提交该分支 然后
  • 在 matplotlib 轮廓图中同时使用 set_under 和 set_bad

    我正在尝试生成一个 matplotlib 轮廓图 其中指定值下的所有值都为白色 包括零 并且所有 nan 值 代表缺失数据 为黑色 我似乎无法让 nan 值的颜色与低于 零值不同 问题的一个简化示例是 import numpy as np
  • 打印到同一行时遇到问题

    我正在尝试编写一个代码 您在控制台中输入一个整数 然后您输入的整数显示得更大 由字母组成 如 ascii art 所以假设输入是112 那么输出将是 我的代码将具有相同的输出 只是不在同一行 它将在另一个数字下打印一个数字 从我的代码中您可
  • seaborn barplot:随 x 和色调改变颜色

    我的数据集包含有关决策支持模型的短期和长期影响的信息 我想将其绘制在条形图中 有 4 个条形 模型 短期 模型 长期 模型关闭 短期 模型 长期 这是一些示例代码 df pd DataFrame columns model time val
  • 临时容器对象上的迭代器

    假设我有一个按值返回 STL 容器的函数 例如 std list std list