ФлеймФорумПрограммирование

Самые удивительные открытия в С/С++, которые вам доводилось делать (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
13:40, 17 июня 2010

KpeHDeJIb

1. Могу только догадываться что такое "в начале"
2. GCC передает this на стеке (как cdecl, причем - последним параметром), MSVC - в регистре ECX.

#31
13:57, 17 июня 2010

Ghost2
В начале это значит перед остальными аргументами в порядке размещения данным компилятором аргументов при передаче в функцию.

#32
13:58, 17 июня 2010

Более-менее открытием была возможность перегрузки по const. А еще, интересно и вполне логично, что, указатель, принадлежащий классу(если экземпляр имеет квалификатор const), рассматривается именно как константный указатель на неконстантные данные. Что дает возможность таскать с собой кусок памяти(для какого-нибудь счетчика, например) и модифицировать его в константных методах.

Также, открытием была возможность изменять тип возвращаемого значения виртуального метода(при условии что новый тип является наследником старого).
Пример кода:

class A
{
public:
  A(){}
  virtual ~A(){}

  virtual A* copy() = 0;
};

class B
  :  public A
{
public:
  B(){}
  ~B(){}

  B* copy()
  {
    //  здесь что-ниудь..
  }
};
#33
14:07, 17 июня 2010

KpeHDeJIb

> В начале это значит перед остальными аргументами в порядке размещения данным
> компилятором аргументов при передаче в функцию
Ну вот я и говорю, что все не так.

#34
14:15, 17 июня 2010

Ghost2
> GCC передает this на стеке (как cdecl, причем - последним параметром)
Значит теоретически можно на Си с Си++ работать, если знать манглинг имён.

#35
14:45, 17 июня 2010

  Сейчас уже мало что удивляет, хотя и встречается кое-что интересное. Довольно подздно узнал про такие ключевые слова как volatile, explicit, mutable.
  А недавно прочитал про расширения языка С в gcc. Просто ошеломительно: http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html. Оказывается там уже давно есть конструкция typeof, аналогичная decltype из нового стандарта уже С++, или вложенные функуции - почти лямбды. И вообще потом мне сказали, что в С++0х много того, что разработчики компиляторов уже реализоыввали, но что было неспецифицировано. То же выравнивание данных (не знаю, правда, есть оно в С++0х, или нет, но в С1х обещают), поддержка юникода.

#36
14:46, 17 июня 2010

Для меня из последних самым удивительным в C++ было это:
http://easy-coding.blogspot.com/2010/06/delete.html

Не понимаю наличие подобной очевидной глупости, источника трудно уловимых ошибок, в вполне уже устоявшемся языке.

Настоящим открытием стало бы существование стандартизированного ABI для C++.

#37
16:53, 17 июня 2010

Законный обход константности (пример из Дизайн и Эволюция языка C++)

const char cc = 'a';
const char* pcc = &cc;
const char** ppcc = &pcc;
void* pv = ppcc;
char** ppc = (char**)pv;

void f()
{
  **ppc = 'x';
}
#38
16:56, 17 июня 2010

а чем const_cast хуже?

#39
16:59, 17 июня 2010

  Вообще "Дизайн и эволющия С++" тоже полна открытий.

#40
16:59, 17 июня 2010

cNoNim
ничем. Собственно это было объяснение его появления.

#41
17:48, 17 июня 2010

mitroxa
> Union в таких случаях предпочтительней, наверно.
В общем-то да. Правда я не сразу въехал, как это сделать :)

Zefick
> Вообще "Дизайн и эволющия С++" тоже полна открытий.
+1

Причем и эволюция систем программирования в целом. Не так давно (по необходимости) начал изучать C# в работе с .NET. Изначально некоторые моменты (такие, как практическая невозможность reinterpret casting :( ) бесили, но когда въехал в общие принципы, технология неожиданно стала радовать, особенно обработка исключений :)

#42
18:10, 17 июня 2010

То, что при наличии шаблонного конструктора копирования/оператора присваивания при точном соответствии вызывается все равно дефолтовый. К счастью, это знание мне стоило всего 3 часов отладки, так как проект не успел разрастись.

#43
18:29, 17 июня 2010

аа..

template<> foo<char *>();
tempalte<> foo<char []>();

template<> foo<char **>();
template<> foo<char (*)[]>();

- четые абсолютно разных шаблона о_О

#44
19:15, 17 июня 2010

Zefick
> Вообще "Дизайн и эволющия С++" тоже полна открытий.
Точно! Приятно было узнать, что Страуструп размышлял над мультиметодами, но не сложилось (

Страницы: 1 2 3 4 5 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.