【发布时间】:2019-11-21 09:48:27
【问题描述】:
所以我知道重复使用后递增的变量是undefined behavior in a function call。我的理解是这在构造函数中不是问题。我的问题是关于 tie 的问题,奇怪的是,它介于两者之间。
鉴于:pair<int, int> func() 我能做到吗:
tie(*it++, *it) = func();
或者这是未定义的行为?
【问题讨论】:
-
std::tie是一个函数。我不明白为什么会有所不同。 -
在 C++17 中,这不再是 UB——尽管第二个参数是否为递增值是未指定。
-
@DavisHerring 这不是 UB 的定义吗?
-
@DavisHerring 啊……我真的很喜欢那些鼻恶魔。所以我想我们是说现在编译器定义了它将如何表现?真的同样困难,只是可能没有那么灾难性。
-
@JonathanMee:不,因为您没有使用花括号初始化列表。如果使用括号,构造也不会得到排序保证。
标签: c++ increment undefined-behavior function-call tie