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

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

Страницы: 1 2 3 4 5 Следующая »
#0
23:58, 16 июня 2010

У меня они такие:

1. Наличие указателей на члены класса-переменные. О том, как хорошо бы иметь такое средство, я думал задолго до того, как внезапно(ТМ) узнал, что они в С++ уже есть. (Где-то в местных анналах даже затесался пост на эту тему.)

2. Последнее открытие случилось сравнительно недавно, и потому тем более удивительно. Я понял, почему есть операторы && и ||, а оператора ^^ нету (хотя в некоторых специфических случаях его не хватает). Оказывается, он просто не нужен - вместо него можно использовать оператор !=. Вот оно как. 0_o

А у вас?

#1
1:20, 17 июня 2010

Перегрузка оператора "запятая".

#2
1:53, 17 июня 2010

1. Существование блоков { } самих по себе (т.е. без for'ов, if'ов  и т.д.).
2. И то, что несколько идущих подряд строковых литералов считается как одно целое, т.е. например очень необычно видеть такое

#define STR "hello"

printf("begin" STR "end");
#3
2:33, 17 июня 2010

присоединяюсь к 1,2 - круто )

мое не из с а из среды, но тем не менее: выделеный блок можно при помощи Shift+Tab сдвинуть на табуляцию влево

#4
2:56, 17 июня 2010
int a, *p;
 ...
a = -1[p];
#5
3:52, 17 июня 2010

Nomad
Этого я до сих пор не понимаю :)

#6
4:10, 17 июня 2010

Sergio

a[b]

в C/C++ - сахар для

*(a + b)

поэтому работает в обе стороны

#7
9:33, 17 июня 2010

Объявление локальных классов внутри функций

#8
9:49, 17 июня 2010

1. узнал оператор ~
2. __asm{}

#9
9:55, 17 июня 2010

Sbtrn. Devil
> Наличие указателей на члены класса-переменные
Никак не пойму, что это означает.

#10
10:16, 17 июня 2010

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

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

Voltt
> > Наличие указателей на члены класса-переменные
> Никак не пойму, что это означает.
+1

Sbtrn. Devil
> 1. Наличие указателей на члены класса-переменные.
В первый раз слышу, это может стать открытием :) Всегда считал, что:

class CMyClass
{
public:
    CMyClass();
    void Method(); // Это метод
    int m_Member; // Это член
};

// ...

CMyClass* pPtr = new CMyClass();

pPtr->Method(); // здесь вызов метода через указатель
pPtr->m_Member = 0; // это доступ к члену через указатель

Я в растерянности :)

#12
10:51, 17 июня 2010

А я понял как:

class CMyClass
{
public:
    CMyClass();
    void Method(); // Это метод
    int m_Member; // Это член
};

// ...

CMyClass my;
int* pPtr = &my.m_Member;

*pPtr = 0; // это доступ к члену через указатель
#13
10:53, 17 июня 2010

Для меня пока приятным открытием было, то что в производном классе при создании объекта
вызывается сначала конструктор базового по умолчанию)

#14
11:14, 17 июня 2010

Voltt
> Никак не пойму, что это означает.
Это крутейшая вещь.

struct A
{
 int x;
 int y;
};

void ProcessA (A &a,int (A::*z))
{
 (a.*z)++;
}

...
A a;
ProcessA (a, &A::x); // x++
ProcessA (a, &A::y); // y++

Казалось бы, простая штука, но сколько полезных вещей можно с ней сделать! Например:

struct vector2d { int x,y; ... };
struct vector4d
{
 int x,y,z,w;
 ...
 vector2d get_subvector2d (int (vector4d::*x1),int (vector4d::*x2))
 {
  return vector2d (this->*x1,this->*x2);
 }
};

vector4d v = ...;
vector2d vxy = v.get_subvector2d (&A::x,&a::y);
vector2d vyx = v.get_subvector2d (&A::y,&a::x);
vector2d vzz = v.get_subvector2d (&A::z,&a::z);
// а иначе пришлось копипастить 6... нет, 16 версий, для каждой возможной комбинации по штуке
Страницы: 1 2 3 4 5 Следующая »
ФлеймФорумПрограммирование

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