2016-04-08 2 views
-3

Первый странный кусок:загадочные C++, помогите мне undertand

struct rect { int area; int perimeter; int max_side; } 
int n=2; 
rect* test= new rect*[n]; // why multiplication sign??? 

Второй странный кусок:

bool (*cmpf[])(rect_xywhf*, rect_xywhf*) = { 
    area, 
    perimeter, 
    max_side 
}; 

rect** testarray[10]; 
std::sort(testarray[0], testarray[9], cmpf[0]); 

Я понимаю МРП на заказ «меньше» оператор-функция используется для сортировки, но я никогда в моей жизни видели подобные функции сравнения.

Пожалуйста, гуру C++ расшифруйте эти два шедевра, пожалуйста!

+0

'RECT *' является указателем на 'rect', не умножение. – Jarod42

+0

'cmpf' - массив указателей функции. – Jarod42

ответ

0
rect* test= new rect*[n]; 

эквивалентно

using rectPtr = rect*; // rect pointer 
rectPtr test = new RectPtr[n]; // allocate n pointers. 

Для второго фрагмента:

bool (*cmpf[])(rect_xywhf*, rect_xywhf*) 

эквивалентно

using Fun = bool(rect_xywhf*, rect_xywhf*); // Function type 
using FunPtr = Fun*; // pointer on function. 
FunPtr cmpf[] // Array of pointer on function 
Смежные вопросы