gpt4 book ai didi

c++ - 为什么 MVS 编译器可以将参数 'myStruct' 转换为 'myStruct &' 。并且没有归档错误 C2664 : cannot convert 'myStruct' to 'myStruct &'

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:53 24 4
gpt4 key购买 nike

我有一个类,我使用 std::mem_fn在辅助函数之间进行选择。

  1. 如果我缺少 & 为什么我的代码可以编译和运行在m_funcContainer减速?在代码中 &/**/ 注释掉myStruct/*&*/

std::map < std::string, std::function<void(const myClass*, myStruct/*&*/) >> m_funcContainer

(但在 m_funcContainerInt 的情况下,编译器会出现编译错误)

error C2664: 'void (int &) const' : cannot convert argument 1 from 'int' to 'int &'

  1. 我觉得我没有以最好的方式制定我的问题的标题,你能帮我制定技术上更正确的标题吗?

Why the compiler can convert argument 'myStruct' to 'myStruct &' in std::function

我的简化代码是

myClass.h

#include <memory>
#include <map>
#include <functional>

struct ExtraFlag
{
};

struct Flag
{
};

struct myStruct
{
std::shared_ptr<ExtraFlag> extraFlag;
std::shared_ptr<Flag> flag;

explicit myStruct()
{
}
};

class myClass
{
private:
std::map < std::string, std::function<void(const myClass*, myStruct/*&*/) >> m_funcContainer;
std::map < std::string, std::function<void(const myClass*, int/*&*/) >> m_funcContainerInt;

private:
void funcMyStruct(myStruct& arg1) const;
void funcInt(int& arg1) const;
public:
myClass();
};

myClass.cpp

#include "myClass.h"
myClass::myClass()
{
m_funcContainer["func"] = std::mem_fn(&myClass::funcMyStruct);
myStruct myStructInstance;
m_funcContainer.at("func")(this, myStructInstance);

int a;
m_funcContainerInt["func"] = std::mem_fn(&myClass::funcInt);
m_funcContainerInt.at("func")(this, a);
}
void myClass::funcMyStruct(myStruct& arg1) const
{}

void myClass::funcInt(int& arg1) const
{}

已编辑我在 Microsoft visual studio 2013 上编译

最佳答案

您的问题是 MSVC2013 在其默认设置下不是 C++ 编译器。它编译了一种与 C++ 密切相关的语言,但具有“扩展”。你正被其中一只咬伤。

/Za 将关闭(大多数?)语言扩展,我相信包括给您带来问题的那个。

我听说一些 MSVC 附带的 header (系统 header )可能与 /Za 有问题。而且,在关闭 /Za 的情况下编译和测试的代码可能会在打开 /Za 的情况下发生意外的行为变化。我会将它默认包含在新文件或项目中,如果您有一个旧项目,请激活它并测试它不会导致问题。

关于c++ - 为什么 MVS 编译器可以将参数 'myStruct' 转换为 'myStruct &' 。并且没有归档错误 C2664 : cannot convert 'myStruct' to 'myStruct &' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33345509/

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