Я чувствую смущение о лямбда в C++. Связано ли это с компилятором? Следующий код работает правильно в ubuntu g ++ 4.6.3 и g ++ 5.2. Но когда я запускаю его в centos 4.8.5, результатом является ошибка.C++ лямбда выражение замешательство
//
class ScopeGuard
{
public:
explicit ScopeGuard(std::function<void()> onExitScope)
:onExitScope_(onExitScope)
{
}
~ScopeGuard()
{
onExitScope_();
}
private:
std::function<void()> onExitScope_;
};
И есть функция для распаковки данных.
//
...
int dstLen = 10 * 1024 * 1024;
char *dstBuf = new char[dstLen];
// When I comment this line the err return Z_OK, otherwise return Z_BUFF_ERROR.
ScopeGuard guard([&](){if (dstBuf) delete[] dstBuf; dstBuf=NULL;});
// zlib function.
int err = uncompress((Bytef *)dstBuf, (uLongf*)&dstLen, (Bytef*)src, fileLen);
if (err != Z_OK)
{
cout<<"uncompress error..."<<err<<endl;
return false;
}`
Возвращаемое значение функции uncompress - Z_BUFF_ERR только при запуске кода в centos g ++ 4.8.5. когда я аннотирую ScopeGuard, он возвращает Z_OK. – MiJia
Кроме того, CentOS не является компилятором; каков фактический компилятор и его версия? –
Когда я запускаю centos с gcc версии 4.8.5, результатом является ошибка. – MiJia