gpt4 book ai didi

c++ - emplace_back 和 VC++ 的挫败感

转载 作者:可可西里 更新时间:2023-11-01 18:26:35 27 4
gpt4 key购买 nike

我正在使用 Visual Studio 2012,同时使用默认编译器和 Nov CTP 编译器进行尝试,下面显示了我的问题:

struct doesCompile
{
int mA, mB, mC, mD, mE;

doesCompile(int a, int b, int c, int d, int e) : mA(a), mB(b), mC(c), mD(d), mE(e)
{
}
};

struct doesNotCompile
{
int mA, mB, mC, mD, mE, mF;

doesNotCompile(int a, int b, int c, int d, int e, int f) : mA(a), mB(b), mC(c), mD(d), mE(e), mF(f)
{
}
};


int _tmain(int argc, _TCHAR* argv[])
{
std::vector<doesCompile> goodVec;
goodVec.emplace_back(1, 2, 3, 4, 5);

std::vector<doesNotCompile> badVec;
badVec.emplace_back(1, 2, 3, 4, 5, 6); // error C2660: 'std::vector<_Ty>::emplace_back' : function does not take 6 arguments

return 0;
}

为什么 emplace_back 似乎被限制在最多 5 个参数??他们甚至说 http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx它需要任意数量的参数..

使用 VS2012 有什么办法解决这个问题吗?

最佳答案

这是以前的Visual C++编译器架构造成的限制。 future 版本的 VC++ 将取消该限制并允许true 可变参数模板。

目前,您可以通过在代码中添加以下之前来静态提高伪可变参数模板的最大限制:

#define _VARIADIC_MAX 6

这将以降低编译速度为代价将限制设置为 6 而不是 5(最大可能值为 10)。

关于c++ - emplace_back 和 VC++ 的挫败感,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200183/

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