首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >swap()会导致未定义的行为吗?

swap()会导致未定义的行为吗?
EN

Stack Overflow用户
提问于 2014-06-21 05:26:42
回答 1查看 970关注 0票数 17

我正在尝试从C++11: utility.swap了解std::swap上的条件。模板定义为

代码语言:javascript
复制
template <typename T> void swap(T &, T &)

(加上一些noexcept细节),并且具有“交换存储在两个位置的值”的效果。

下面的程序有明确的定义吗?

代码语言:javascript
复制
#include <utility>

int main()
{
    int m, n;
    std::swap(m, n);
}

如果我自己编写交换代码(即int tmp = m; m = n; n = tmp;),它将具有未定义的行为,因为它将尝试在未初始化的对象上进行左值到右值的转换。但是标准的std::swap函数似乎没有任何强加于它的条件,也不能从规范中推导出存在任何左值到右值,从而UB。

该标准是否要求std::swap在未初始化的对象上执行一些定义良好的魔术?

为了阐明这一点,请考虑函数void f(int & n) { n = 25; },它从不具有未定义的行为(因为它不从n读取)。

EN

回答 1

Stack Overflow用户

发布于 2014-06-21 05:39:34

由于M的值未定义,我预计它会影响对交换的调用。当调用交换时,鼻魔可能会飞起来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24335886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档