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

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

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

Александреску в свое время вынес мозг тайп листом
из языковых непомню что удивило

#46
19:59, 17 июня 2010

Nomad
> - четые абсолютно разных шаблона о_О
  Почему-то когда я реализую две шаблонные функции

template <class T> void foo(T){}
template<> void foo(char *mas){printf("pointer");}
template<> void foo(char mas[]){printf("array");}

то компилятор G++ выдаёт ошибку -  redefinition of 'void foo(T) [with T = char*]'.

  Ещё, кстати, вспомнил, что можно шаблоны явно инстанцировать.

#47
0:59, 18 июня 2010

ITALY
> Чем тебя не устраивает
> void ProcessA (int* pVal)
> {
> ++(*pVal);
> }
>
> A a;
> ProcessA (&a.x); // x++
> ??
Это ж для примера. Бывают случаи, в которых польза от фичи более несомненна. Например, для интрузивных контейнеров удобно через него указывать член, который содержит закладку.

#48
1:36, 18 июня 2010

Zefick
В студии (7, кажется) напоролся на этот косяк, и не мог передавать в шаблон локальные строки.

#49
13:28, 18 июня 2010

1. Перехват исключения в списке инициализации членов класса.
2. Сохранение виртуальности вызова при вызове виртуальной функции по указателю на нее.
3. Надо вспоминать...

#50
13:53, 18 июня 2010

ChaoX
> при наличии шаблонного конструктора копирования/оператора
> присваивания при точном соответствии вызывается все равно дефолтовый.
Можно подробней? Дефолтовый -- т.е. определённый для данного типа данных?

#51
15:59, 18 июня 2010

Voltt

template <typename T>
class Foo
{
public:
   template <typename U>
   Foo(const Foo<U> &src)
   {
       cout << "template copy constructor";
   }

   Foo(const Foo &src)
   {
       cout << "copy constructor";
   }
};

...

Foo<int> a;
Foo<double> b(a); //Напечатает "template copy constructor"
Foo<int> c(a); //Напечатает "copy constructor"

При этом, если ты не объявишь конструктор копирования Foo(const Foo &src), вызовется дефолтный. А это чревато довольно неприятными багами и длительной медитацией в дебаггере.

#52
16:45, 18 июня 2010

Очень приятным открытием для меня был тот факт, что полное описание языка C занимает 10 сраниц печатного текста.

#53
16:58, 18 июня 2010

Megabyte-Ceercop
завтра покимон выйдет из бани и порвет тебя аргументом что в С около 25 ключевых слов...

#54
18:03, 18 июня 2010

Megabyte-Ceercop
> Очень приятным открытием для меня был тот факт, что полное описание языка C
> занимает 10 сраниц печатного текста.
10 страниц?
Полное описание языка Си можно разместить на ладони человека. Странно, что такие татуировки не делают.

Самым удивительным в Си является тот факт, что на нем пишут все меньше и меньше. Удивляюсь этому по три раза на дню.

#55
20:03, 18 июня 2010

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

#include <iostream>
using namespace std;

class A
{
    public:
        virtual A *get () = 0;
        virtual void out() {cout << "A::out()" << endl;}
};

class B : public A
{
    public:
        B *get () {return this;}
        void out(){cout << "B::out" << endl;}
};

int main (int argc, char** argv)
{
    A *a = new B;
    B *b = a->get();
}

компилятор выдает: error: invalid conversion from `A*' to `B*'

#56
22:50, 18 июня 2010

Pokimon
найди мне такое описание...

#57
23:20, 18 июня 2010

Мое небольшое удивление вызвал MySQL, который дату возвращал в формате числа как 20100618221532 (ГГГГММДДЧЧММСС). Я почему-то считал, что он должен по умолчанию возвращать timestamp

#58
2:56, 20 июня 2010

"Очень приятным открытием для меня был тот факт, что полное описание языка C занимает 10 сраниц печатного текста."
http://www.nirvani.net.nyud.net:8090/docs/ansi_c.pdf
-> 550 страниц

#59
13:12, 20 июня 2010

ciber_man
> -> 550 страниц
Гг. Опять Покимона выпороли.

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

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