Alterações de biblioteca C++ padrão: Problemas de atualização
O tópico a seguir discutem as dificuldades que podem ser encontrados com um aplicativo anterior e o novo em time de execução bibliotecas.
Diferenças na implementação iostream
Projetos anteriores criados com nenhuma bibliotecas padrão
Manipulação de exceção de C++ deve ser ativada para a biblioteca C++ padrão
Diferenças na implementação iostream
A Biblioteca iostream antiga foi removida a partir do Visual C++ .NET 2003.
A principal diferença entre a biblioteca C++ padrão e bibliotecas de time de execução anteriores é na Biblioteca iostream.Detalhes da implementação iostream tenham alterado e pode ser necessário reescrever partes do código que use iostream que vincule com a biblioteca C++ padrão.
Você precisará remover quaisquer cabeçalhos iostream antigo (fstream.h, iomanip.h, ios.h, iostream.h, istream.h, ostream.h, streamb.h e strstrea.h) você incluiu no seu código e adicionar um ou mais dos cabeçalhos de novos Standard C++ iostream (<fstream>, <iomanip>, <ios>, <iosfwd><iostream>, < iostream > <istream>, <ostream>, <sstream>, <streambuf>e <strstream>, tudo sem a extensão. h).
A lista a seguir descreve o comportamento na nova biblioteca iostream Standard C++ que difere do comportamento da Biblioteca iostream antigo.
Na Biblioteca iostream Standard C++ nova:
em em aberto funções não terão um terceiro parâmetro (o parâmetro de proteção).
Não é possível criar fluxos de identificadores de arquivo.
Com algumas exceções, todos os nomes na nova biblioteca C++ padrão são no STD namespace.See Usando a biblioteca C++ cabeçalhos para obter mais informações.
Não é possível em em aberto ofstream objetos com o IOS::out sinalizar sozinho.The IOS::out sinalizar deve ser combinada com outra ios enumerador de uma lógica OR; Por exemplo, com IOS::in or IOS::App.
IOS::mercadoria não retorna um valor diferente de zero depois de atingir o participante de arquivo porque o eofbit estado é conjunto.
IOS::conjuntof(_IFlags) não deve ser usado com um valor de sinalizar de IOS::DEC, IOS::Oct, or IOS::hex, a menos que você saiba que nenhum dos sinalizares de base é atualmente conjunto.As funções de entrada/saída formatadas e operadores pressupõem que apenas uma base é conjunto.Em vez disso, use ios_base. For example, setf( ios_base::oct, ios_base::basefield ) clears all base information and sets the base to octal.
IOS::unsetf returns void em vez do valor anterior.
IStream::Get( char & _Rch ) não atribui a Rch se houver um erro.
istream::get( char* _Pch, int _Ncount, char_Delim ) is different in three ways:
Quando nada é lido, failbit is conjunto.
An EOS é sempre armazenada após a extração de caracteres (isso acontece independentemente do resultado).
Um valor -1 para _ Ncount é um erro.
IStream::seekg com um parâmetro inválido não define failbit.
O tipo de retorno streampos é uma classe com operadores sobrecarregados. Em funções que retornam um streampos valor (sistema autônomo IStream::tellg, ostream::tellp, strstreambuf::seekoff, e strstreambuf::seekpos), você deve converter o valor retornado para o tipo necessário: streamoff, fpos_t, ou mbstate_t.
O primeiro parâmetro de função (_Falloc) na strstreambuf::strstreambuf( _Falloc**,** _Ffree ) leva um size_t argumento, não um longo.
Além das alterações acima, as seguintes funções, constantes e enumeradores são elementos da Biblioteca iostream antigo não são elementos da nova biblioteca iostream:
attach member function of filebuf, fstream ifstream, and ofstream
fd member function of filebuf, fstream ifstream, and ofstream
filebuf::openprot
filebuf::setmode
IOS::bitalloc
IOS::NOCREATE
IOS::noreplace
IOS::sync_with_stdio
streambuf::out_waiting
streambuf::setbuf (use rdbuf-> pubsetbuf para o mesmo comportamento)
Projetos anteriores criados com nenhuma bibliotecas padrão
Você pode criar um projeto sem bibliotecas padrão selecionando / NODEFAULTLIB.Se seu projeto anterior foi criado com nenhuma biblioteca de padrão e você desejar fazer chamadas iostream, você deve nomear um novo C++ Standard em time de execução bibliotecas (Libcp.lib, Libcpmt.lib, Msvcprt.lib e assim por diante) ou um dos iostream antigo em time de execução bibliotecas (Libci.lib, Libcimt.lib, Msvcirt.lib e assim por diante) para vincular com a biblioteca adequada.
Nas versões de Visual C++ anteriores (4.1 e anteriores), o em time de execução nomes da biblioteca foram Libc.lib Libcmt.lib e Msvcrt.lib.Essas bibliotecas incluíam a Biblioteca iostream antigo.Agora foi removida da Biblioteca iostream antigo dessas bibliotecas.Se você não escolher ignorar bibliotecas padrão e incluir arquivos de cabeçalho iostream antigos em seu código, o antigo iostream em time de execução bibliotecas (Libci.lib, Libcimt.lib, Msvcirt.lib e assim por diante) são vinculadas por padrão.No entanto, se você optou por ignorar bibliotecas padrão e ter manualmente adicionada dentre os primeiros em time de execução bibliotecas, suas chamadas iostream agora serão desfeitos.
Manipulação de exceção de C++ deve ser ativada para a biblioteca C++ padrão
Qualquer arquivo que usa a biblioteca C++ padrão deve ser compilado com tratamento de exceção de C++ habilitado.Para obter mais informações, consulte /GX.