Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
#define NOMINMAX
+ нельзя так писать в заголовочных файлах библиотеки, которая будет использоваться третьими лицами — это может поломать их код.
#pragma push_macro("min")
#undef min
// a lot of code
#pragma pop_macro("min")
для gcc и подобных компиляторов есть аналоги (наизусть не помню, там обычно таких проблем не возникает).#define SOME_MACRO(x) (x)
template<typename T1, typename T2>
T2 some_func(T1 x)
{
return x;
}
int main()
{
SOME_MACRO(1 == (some_func<int,int>(1)));
return 0;
}
vector::reserve
, swap
— это ведь и не трюки, и не советы. И статья на статью не тянет.В C++11 было решено, что std::vector и ряд других контейнеров могут использовать move-конструкторы и move-assignment операторы для элементов только если move-конструкторы и move-assignment операторы этих элементов не кидают исключений (ну или если элементы не могут копироваться).
Начнем с достаточно тривиального совета: если вы знаете количество элементов, которые будут вставлены в вектор, то перед вставкой необходимо вызвать reserve
C++ трюки и советы из Boost на каждый день