为什么没有阻止std :: initializer_list的移动分配?

时间:2018-01-31 15:50:02

标签: c++11 initializer-list

很明显,std :: initializer_list不是实际的容器。 该标准明确定义了使用std :: initializer_list可以做什么和不能做什么。

但为什么语言可以选择做愚蠢的事情,比如将一个临时的std :: initializer_list分配到另一个 - 当它可以很容易阻止时=删除std :: initializer_list的移动赋值运算符?

这是一个破解的代码示例,它编译:

void foo(std::initializer_list<int> v) {
    std::cout << *v.begin() << std::endl;
}

int main() {
    int a = 1, b = 2, c = 3;
    auto val = {a, b, c}; // ok, extending the lifetime of {a, b, c}
    foo(val); // prints ok
    int i = 7;
    val = {i}; // doesn't handle well assignment of temporary
    foo(val); // prints garbage...
}

Output,由@nwp提供:

1
-365092848

0 个答案:

没有答案