Это - двойное, разыменовывают.
int i = 3;
int* ptr_to_i = &i;
int** ptr_to_ptr_to_i = &ptr_to_i;
std::cout << **ptr_to_ptr_to_i << std::endl;
Печать 3.
RuntimeWrappedException
, производное от Exception
. ] Вы не генерируете исключение RuntimeWrappedException
, это делает среда CLR. В MSDN есть подробное описание, которое я цитирую здесь:
Некоторые языки, такие как C ++, позволяют создавать исключения любого управляемого типа. Другие языки, такие как Microsoft C # и Visual Basic, требуют, чтобы каждое генерируемое исключение было производным от класса Exception. Чтобы поддерживать совместимость между языками, среда CLR обертывает объекты, не являющиеся производными от Exception, в объект RuntimeWrappedException.
Если вы хотите обрабатывать исключения CLS и не-CLS по-разному, просто перехватите их в правильном порядке:
try {
// some code
catch(RuntimeWrappedException ex) {
// non-CLS exceptions
catch(Exception ex) {
// CLS exceptions
}
Хотя компилятор C # позволяет разработчикам генерировать только объекты, производные от исключений, до C # версии 2.0, компилятор C # действительно позволял разработчикам перехватывать исключения, не совместимые с CLS. используя следующий код:
private void SomeMethod() {
try {
// Inside the try block is where you put code requiring
// graceful recovery or common cleanup operations.
}
catch (Exception e) {
// Before C# 2.0, this block catches CLS-compliant exceptions only
// In C# 2.0, this block catches CLS- & non-CLS- compliant exceptions
throw; // Re-throws whatever got caught
}
catch {
// In all versions of C#, this block catches
// CLS- & non-CLS- compliant exceptions
throw; // Re-throws whatever got caught
}
}
CLS позволяет это, но не все языки. Это можно сделать с помощью C ++ / CLI, но нельзя с C #, VB.NET.
Начиная с .Net Framework 2.0, все исключения, не относящиеся к CLS, заключены в исключение RuntimeWrappedException .
Поскольку RuntimeWrappedException является производным от Exception, catch (Exception) перехватит исключения, не относящиеся к CLS.
Из RuntimeWrappedException вы можете получить доступ к исходному исключению через свойство RuntimeWrappedException.WrappedException.