2015-05-27 3 views
0

Я использую odeint boost для решения дифференциальных уравнений. В Visual Studio 2010, нет никаких ошибок, показывая вверх, но когда я использую Visual Studio 2013, я получаю эту ошибкуошибка C4996: 'std :: _ Copy_impl': безопасно ли его отключить?

xutility(2132): error C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'

Я решить эту проблему путем отключения предупреждения с помощью этого #pragma warning(disable : 4996) образца, представленного в odeint теперь работает. Это образец,

#pragma warning(disable : 4996) 
#include <iostream> 
#include <boost/array.hpp> 
#include <boost/numeric/odeint.hpp> 

using namespace std; 
using namespace boost::numeric::odeint; 

const double sigma = 10.0; 
const double R = 28.0; 
const double b = 8.0/3.0; 

typedef boost::array< double, 3 > state_type; 

void lorenz(const state_type &x, state_type &dxdt, double t) 
{ 
    dxdt[0] = sigma * (x[1] - x[0]); 
    dxdt[1] = R * x[0] - x[1] - x[0] * x[2]; 
    dxdt[2] = -b * x[2] + x[0] * x[1]; 
} 

void write_lorenz(const state_type &x, const double t) 
{ 
    cout << t << '\t' << x[0] << '\t' << x[1] << '\t' << x[2] << endl; 
} 

int main(int argc, char **argv) 
{ 
    state_type x = { 10.0, 1.0, 1.0 }; // initial conditions 
    integrate(lorenz, x, 0.0, 25.0, 0.1, write_lorenz); 
} 

Вопрос в том, можно ли отключить это предупреждение? Thanks

ответ

1

Код должен быть безопасным. Мы отключили одно и то же предупреждение в модульных тестах odeint.

+4

_ «Мы отключили одно и то же предупреждение», - не делает меня очень убедительным аргументом, почему это безопасно. – sehe

+1

:) Правильно, это не объясняет, почему вы можете его отключить. На самом деле я не помню, в чем проблема с 4996. – headmyshoulder

+1

Связанный дубликат: – sehe

Смежные вопросы