Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A sintaxe para os operadores de conversão foi alterado de gerenciado Extensions para C++ para Visual C++ 2008.
Um exemplo é escrever op_Implicit Para especificar uma conversão. Eis uma definição de MyDouble extraído de especificação de linguagem:
__gc struct MyDouble {
static MyDouble* op_Implicit( int i );
static int op_Explicit( MyDouble* val );
static String* op_Explicit( MyDouble* val );
};
Isso significa que, devido a um número inteiro, o algoritmo para converter esse inteiro em um MyDouble é fornecida pela op_Implicit operador. Além disso, essa conversão será realizada implicitamente pelo compilador.Da mesma forma, dado um MyDouble objeto, os dois op_Explicit operadores fornecem os respectivos algoritmos para converter esse objeto em um número inteiro ou um gerenciado String entidade. No entanto, o compilador não executará a conversão, a menos que explicitamente solicitado pelo usuário.
No translation from VPE for Csharp, isso parece da seguinte maneira:
class MyDouble {
public static implicit operator MyDouble( int i );
public static explicit operator int( MyDouble val );
public static explicit operator string( MyDouble val );
};
O código translation from VPE for Csharp se parece mais com C++ que gerenciado Extensions para C++ faz.Não é o caso na nova sintaxe.
O comitê de ISO-C++ introduziu uma palavra-chave, explicit, para atenuar conseqüências indesejadas – por exemplo, um Array classe que usa um único argumento inteiro sistema autônomo uma dimensão implicitamente converterá qualquer número inteiro em um Array objeto que é não o que você deseja. Uma maneira de evitar que isso é um idioma de design de um segundo argumento fictício para um construtor
Por Outros lado, você não deve fornecer um emparelhar de conversão durante a criação de um tipo de classe do C++.O melhor exemplo para que é a classe de seqüência de caracteres padrão.Conversão implícita é o construtor de argumento único tirando uma seqüência de caracteres de estilo C.No entanto, ele não fornece o correspondente conversão implícita operador – que de converter um objeto de cadeia de caracteres em um estilo C em seqüência, mas em vez disso, exige que o usuário chamar explicitamente uma função nomeada – nesse caso, c_str().
Dessa forma, associar um comportamento implícita/explícito de um operador de conversão (e sistema autônomo o conjunto de conversões para um único formulário de declaração de encapsulamento) parece ser um aperfeiçoamento no suporte de C++ original para operadores de conversão que eventualmente levaram à explicit palavra-chave. The Visual C++ 2008 o suporte ao linguagem para sistema autônomo operadores de conversão é sistema autônomo a seguir, que é um pouco menos detalhada do que translation from VPE for Csharp por causa do comportamento padrão do operador com suporte para um aplicativo do algoritmo de conversão implícito:
ref struct MyDouble {
public:
static operator MyDouble^ ( int i );
static explicit operator int ( MyDouble^ val );
static explicit operator String^ ( MyDouble^ val );
};
Outra alterar é que um único argumento de construtor é tratado sistema autônomo se ela é declarada sistema autônomo explicit. Isso significa que, para acionar seus invocações, uma conversão explícita é necessária.No entanto, observe que, se um operador de conversão explícita for definido, ele e não o construtor de argumento único, é invocado.