【发布时间】:2011-08-25 05:20:47
【问题描述】:
当我使用 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):警告 C4510:
main::Subtractor:无法生成默认构造函数
Temp.cpp(6) : 参见声明main::SubtractorTemp.cpp(9):警告 C4512:
main::Subtractor:无法生成赋值运算符
Temp.cpp(6) : 参见声明main::SubtractorTemp.cpp(9) : 警告 C4610:
struct main::Subtractor永远无法实例化 - 需要用户定义的构造函数
发生了什么事?
【问题讨论】:
-
您如何获得
42作为答案?48-5等于42吗? -
@Nawaz:大声笑,很好的收获。这是因为我最初是用 48 进行测试,但后来我认为 47 会是一个更有趣的例子,所以我放下了 42。在复制/粘贴错误期间,47 又爬了回来。 :P
-
为什么你认为
47会是“更多”有趣的例子?它有什么特别之处?你的年龄是? :P -
这段代码中没有 lambda。
-
@Nawaz:哈哈,不,我离 42 还差得很远。:PI 只是认为 42 的最终结果可能会更好,所以我将 48 更改为 47。(不过现在很遗憾,哈哈)
标签: c++ templates visual-c++ anonymous-types functor