gpt4 book ai didi

c++ - 在 initializer_list 中使用临时变量会导致访问错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:50 24 4
gpt4 key购买 nike

<分区>

我正在尝试使用 initializer_list 来实例化一个类,但出现了连线错误。

当尝试使用以下方法创建 `ClassB`` 变量时:

ClassB b = { { 1, {} }, { 2, {} };

将发生内存访问冲突。但是,如果更改为:

ClassA a0, a1;
ClassB b = { { 1, a0 }, { 2, a1 } };

错误消失。

我尝试使用 VC 2013(没有更新 1)和 gcc-c++ 4.8.1 进行编译。使用 gcc-c++ 4.8.1 不会产生任何运行时错误。是VC的bug吗?

谁能帮忙确认一下?谢谢!

以下是SSCCE:

#include <iostream>
#include <initializer_list>
#include <map>
#include <vector>
#include <memory>

using namespace std;

struct ClassA {
struct Data {
vector<int> vs;
};
unique_ptr<Data> d;

ClassA() : d(new Data()) {}
ClassA(const ClassA& a) : ClassA() {
*d = *(a.d);
}
};

struct ClassB {
ClassB(initializer_list<pair<const int, ClassA> > v) { as = v; }
map<int, ClassA> as;
};

int main() {
ClassA a0, a1;
// ClassB b = { { 1, a0 }, { 2, a1 } }; // won't crash in VC
ClassB b = { { 1, {} }, { 2, {} } };
return 0;
}

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com