我想在使用lambdas的C++ 11中编写FizzBuzz,但是我收到了一个奇怪的编译器错误。带lambda的FizzBuzz.cpp?
代码:
#include <iostream>
#include <string>
#include <sstream>
#include <list>
#include <algorithm>
using namespace std;
string fizzy(int n) {
int a = n % 3, b = n % 5;
if (a == 0 && b == 0) {
return "FizzBuzz";
}
else if (a == 0) {
return "Fizz";
}
else if (b == 0) {
return "Buzz";
}
else {
stringstream out;
out << n;
return out.str();
}
}
void fizzbuzz() {
string strings[100];
list<int> range(0, 100);
for_each(range.begin(), range.end(), [=](int i) {
strings[i] = fizzy(i);
});
for_each(range.begin(), range.end(), [=](int i) {
cout << strings[i] << endl;
});
}
int main() { fizzbuzz(); }
跟踪:
$ make
g++ -std=c++0x -o fizzy fizzy.cpp
fizzy.cpp: In lambda function:
fizzy.cpp:32:27: error: passing 'const std::string' as 'this' argument of 'std::basic_string<_CharT,
_Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(std::basic_string<_CharT, _
Traits, _Alloc>&&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<ch
ar>, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>]' discards qualifiers
make: *** [fizzy] Error 1
'list range(0,100);'不*做你认为它做的事。 –
2013-03-19 20:17:52
这对于''for_each'永远是效率最低的。 – 2013-03-19 20:26:19
除非你让你的lambda'mutable',否则值捕获是不变的。 – 2013-03-19 20:27:10