gpt4 book ai didi

c++ - 按值传递认为参数是const

转载 作者:行者123 更新时间:2023-11-30 00:55:46 25 4
gpt4 key购买 nike

Windows 7 64 位上的 Visual Studio Enterprise 2010,sp1。提升 1.48.0。

此处开始相关代码。这些位在 header 中定义。

//typedef struct {} empty_t;
//typedef std::pair<size_t, std::shared_ptr<char>> string_t; //Don't ask...
//typedef boost::variant<empty_t, long, double, some other PODs, string_t> variant_t;
//typedef std::map<unsigned short, variant_t> variant_map_t;

这是在复制构造函数的主体中:

std::for_each(std::begin(incoming.values_), std::end(incoming.values_), [&](variant_map_t::value_type value)
{
// This guy is going to populate this::values_, doing the right thing -
// copying by value native and POD types, or deep copying pointers.
boost::apply_visitor(deep_copy_visitor(*this, value.first), value.second);
});

我发现的错误与 lambda 的参数列表有关。 swap 被调用,我认为在对的复制构造函数中,试图首先从传递给 lambda 的右值分配给参数。当在 std::pair 复制构造函数中分配给它时,编译器认为“value.first”是常量。但显然,参数不是 const 限定的,mapped_type 或 key_type 不是 const 限定的,复制构造函数不是 const 方法,无论如何这些都不重要。

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility(209) : see reference to function template instantiation 'void std::_Swap_adl<_Ty1>(_Ty &,_Ty &)' being compiled
with
[
_Ty1=unsigned short,
_Ty=unsigned short
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility(206) : while compiling class template member function 'void std::pair<_Ty1,_Ty2>::swap(std::pair<_Ty1,_Ty2> &)'
with
[
_Ty1=const unsigned short,
_Ty2=variant_t
]
src\foo.cpp(506) : see reference to class template instantiation 'std::pair<_Ty1,_Ty2>' being compiled
with
[
_Ty1=const unsigned short,
_Ty2=variant_t
]

所以不知何故,模板参数得到了 const 限定,而对于我的生活,我无法弄清楚为什么。

我认为编译器出问题了,但我没有别的办法了。早些时候,在我好好搅动我的源代码之前,试图弄清楚这个问题,我可以打开和关闭这个错误消息;我定义了一个 boost::static_visitor 派生类。没有成员,没有方法,什么都没有。这足以在我的复制构造函数中导致此错误。我无法想象还有什么方法可以隔离 ACTUALLY 有问题的代码行......

有没有人认为这是编译器问题,一些未提及的更改会产生副作用?

最佳答案

value_typestd::map<K, V>std::pair<K const, V> ,因为键是不可变的。所以,是的,value.first是 const 限定的。

关于c++ - 按值传递认为参数是const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11675366/

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