gpt4 book ai didi

c++ - 为什么这个仿函数 ("lambda") 会发出奇怪的警告?

转载 作者:太空宇宙 更新时间:2023-11-04 16:30:51 25 4
gpt4 key购买 nike

当我使用 Visual C++ 2010 编译并运行它时:

#include <iostream>

int main() {
int subtrahend = 5;

struct Subtractor {
int &subtrahend;
int operator()(int minuend) { return minuend - subtrahend; }
} subtractor5 = { subtrahend };

std::cout << subtractor5(47);
}

我得到正确答案,42。

然而,编译器提示说这是不可能的:

Temp.cpp(9) : warning C4510: main::Subtractor : default constructor could not be generated
Temp.cpp(6) : see declaration of main::Subtractor

Temp.cpp(9) : warning C4512: main::Subtractor : assignment operator could not be generated
Temp.cpp(6) : see declaration of main::Subtractor

Temp.cpp(9) : warning C4610: struct main::Subtractor can never be instantiated - user defined constructor required

这是怎么回事?

最佳答案

前两个警告只是让您知道由于引用数据成员的存在而无法生成隐式声明的成员函数。

第三个警告是a Visual C++ compiler bug .

可以忽略所有三个警告而不会产生任何不良影响,尽管您可以通过将引用数据成员改为指针来轻松地使所有三个警告消失(引用数据成员几乎永远不值得麻烦)。

关于c++ - 为什么这个仿函数 ("lambda") 会发出奇怪的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7185474/

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