Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Se si aggiorna un programma nel quale è previsto l'utilizzo del codice della libreria standard di C++ compilato in Visual C++ 6.0, tenere presente quanto segue:
Modifiche di reverse_iterator
Alcuni iteratori non corrispondono più ai puntatori
Modifica delle #define di MIN/MAX
Modifiche di reverse_iterator
Sono stati modificati i nomi di alcuni tipi definiti dalla classe reverse_iterator della libreria standard di C++ e anche gli argomenti del template di questa classe sono diversi.
L'esempio riportato di seguito viene compilato in Visual C++ 6.0, ma non funziona nella versione attuale.
#include <iterator>
#include <vector>
typedef std::iterator<std::random_access_iterator_tag, char, int> random_it;
int main( )
{
char c;
// too many template args for VC7
typedef std::reverse_iterator< random_it, char, char&, char *, int > rev_it;
rev_it::reference_type x = c;
rev_it::pointer_type y = 0;
rev_it::iter_type z;
/*
// try the following code instead
typedef std::reverse_iterator< random_it > rev_it;
rev_it::reference a = c;
rev_it::pointer b = 0;
rev_it::iterator_type c1;
*/
}
Alcuni iteratori non corrispondono più ai puntatori
In alcune classi della libreria standard di C++ gli iteratori non sono più definiti come tipi puntatore.
L'esempio riportato di seguito viene compilato in Visual C++ 6.0, ma non funziona nelle righe indicate nella versione attuale.
#include <string>
#include <vector>
#include <algorithm>
bool pred(int i) {
return true;
};
int main()
{
std::string str("test");
const char *pszstr = str.begin(); // LINE 8: INCORRECT
const char *pszStr2 = str.c_str(); // OK
const char *pszStr3 = &(*str.begin()); // OK
std::vector<int> v;
int *pint = std::remove_if(v.begin(), v.end(), pred); // LINE 13: INCORRECT
std::vector<int>::iterator iint = std::remove_if(v.begin(), v.end(), pred); // OK
}
Modifica delle #define di MIN/MAX
La definizione della libreria standard di C++ di _MIN e _MAX è stata modificata da:
#define _MAX _cpp_max
#define _MIN _cpp_min
in:
#define _MAX (max)
#define _MIN (min)
Le definizioni di std::_MIN non sono quindi più valide.
L'esempio riportato di seguito viene compilato in Visual C++ 6.0, ma non funziona nella riga indicata nella versione attuale.
#include <xutility>
#include <stdlib.h>
using namespace std;
int main()
{
std::_MAX(3,4); // error
_MAX(4,5);
}