【发布时间】:2015-03-24 11:36:01
【问题描述】:
以下内容在危险方面大致相同,但第二个 2 被该语言禁止,而第一个则不是。
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> v;
// allowed
std::vector<int>().swap(v);
// not allowed
v.swap(std::vector<int>());
// not allowed
std::swap(std::vector<int>(), v);
}
我知道 Visual Studio 允许所有这些作为编译器扩展通过,我在这个问题上忽略了这一点。
我实际上并不是在争论第一个被禁止 - 我实际上更喜欢第二个被允许(有些地方这会使代码更优雅,通常当 C++ 允许你做一些可能很危险但可能是有益的,它让它通过)但这里有区别似乎很奇怪。
【问题讨论】: