[StructLayout(LayoutKind.Sequential)]
public unsafe struct PLUGININFO
{
public fixed byte name[101];
public fixed byte describe[201];
public short version;
// либо
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 101)]
public string name;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 201)]
public string describe;
public short version;
}
class Car : public Vehicle {
// автомобиль является транспортом
};
class Car {
Engine v8; // автомобиль имеет (содержит) двигатель
};
class Driver {
Car* myCar; // водитель использует автомобиль
};
class Square : public Figure;
class Rectangle : public Figure;
// квадрат и прямоугольник похожи по свойствам, но это разные фигуры
class Engine { // абстракция
public:
virtual void start() = 0;
protected:
float power;
};
class V8 : public Engine { // реализация
virtual void start() {
// wroom wroom
}
};
// Двигатель ДВС реализован как 8-ми цилиндровый двигатель V-конфигурации
is_...
(но не isnot_...
)parse_html()
, то внутри него вместо html_nodes
можно писать просто nodes
. int main()
{
int thread;
int table[8] = { 0 };
omp_set_num_threads(8);
#pragma omp parallel private(thread)//всё, что дальше в скобках - будет запущено в 8 потоках одновременно
{ //потоки могут получать управление в произвольном порядке
thread = omp_get_thread_num(); //каждый поток получает свой номер
if (thread%2 ==0) //четные потоки записывают в табличку единицу
table[thread] = 1;
#pragma omp critical //критическая секция в один момент времени может выполняться только одним потоком
{ //это необходимо, чтобы печать из разных потоков не перемешивалась
std::cout << "Hello, I am thread no " << thread << std::endl;
std::cout << "My table value is" << table[thread] << std::endl;
} //потоки проходят секцию также в произвольной очередности
}
}
если вы без указания типа и так УЖЕ ИМЕЕТЕ достаточно информации, чтобы уверенно работать со значением - тогда можно использовать auto. Если чувствуете, что не имеете, или сомневаетесь, что имеете - лучше тип указать.
std::list<int> items;
auto i = items.cbegin();
std::list<int>::const_iterator
мне никакой новой информации не принесет. Тем более, т.к. итераторы от разных контейнеров несовместимы, то мне нужно еще и сразу знать, по какому конкретно списку у меня итератор - я опять-таки посмотрю на items.cbegin, а не на тип.