Pull to refresh
32
0

User

Send message
Извините, какая разница между new T и new T()?
Извините, но разве это трюки/советы? Ладно, с макросами — трюк, но vector::reserve, swap — это ведь и не трюки, и не советы. И статья на статью не тянет.
Извините ещё раз.
auto lmbd = [](auto i){...}; // Сейчас - нет, но в С++14 - да

Напомнило:
In C++14 you just write «auto auto(auto auto) { auto; }». The compiler infers the rest from context.
Чтобы не мерцало — вместо TRUE, передавайте FALSE:
InvalidateRect(hwnd, NULL, FALSE)
а если я хочу, чтобы swap действительно был выбран из std? Вы ответите — тогда просто пишем std::swap(a, b). А теперь в коде появляется и swap и :=:. И swap более заметен, чем :=:(это как с советом «определяйте функция преобразования operator T() только в крайних случаях»).
Согласитесь, что не нужно делать изменения в языке, чтобы избежать одной только, понятной всем, маленькой строчки кода using std::swap;. Это излишне. В С++ и так слишком много штук, которые можно сделать в слишком много способов, не нужно добавлять избыточности.
Visual Studio я не признавал, так как он был громоздким, и создавал кучу каких-то файликов

О боже, точь-в-точь такие же ассоциации вызывал тогда простой и понятный Dev-C++ и огромная и непонятная Visual Studio.
Почему-то очень трогательные воспоминания. Спасибо!
жесть, ну не нужен «специальный оператор обмена» :=:. И так разобраться во всём, что добавили трудно, учитывая, что сколько не работай с С++03 — «каждый день что-то новое узнаёшь».
Но передача по ссылке предотвращает возможность дать нулевой указатель :) Палка о двух концах.
Вы, наверное, меня не поняли. Я имел в виду, что если уж говорить о проблеме, то зачем наводить нереальные примеры? В том плане, что std::vector и т. д. — вполне стандартизированные вещи.

template <typename T, typename A = std::allocator<T>, typename _P1 = def1, typename _P2 = def2, ...>
class vector;

Вы абсолютно правы. Конечно, предложенный способ не подойдёт.
template <typename T, template<typename, typename> class Container>
struct A
{
  typedef Container<T, std::allocator<T> > type;
};

Можно и упростить (хотя, вряд ли это упрощение..):
template <typename T, template<typename Y, typename = std::allocator<Y> > class Container>
struct A
{
  typedef Container<T> type;
};


Мы должны заглянуть в реализацию std::vector, выяснить, какой тип аллокатора используется по умолчанию, и тогда использовать его.

Зачем заглядывать — все std контейнеры используют std::allocator.
Впечатление, что они даже не пытались собрать либу с Windows SDK

Вот и мне так показалось. А судя по коду, мне также кажеться, делалось это в спешке.
Сказали бы, что SDK-то не для Windows, а то я на радостях очень огорчился, увидев Makefile:
CXX=g++
CFLAGS=-g -Wall
LIB=-lpthread -lcryptopp -lcurl -lreadline -lfreeimage
Ну не знаю, я бы привёл реализацию operator new (msvc10):
_C_LIB_DECL
int __cdecl _callnewh(size_t size) _THROW1(_STD bad_alloc);
_END_C_LIB_DECL

void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
        {       // try to allocate size bytes
        void *p;
        while ((p = malloc(size)) == 0)
                if (_callnewh(size) == 0)
                {       // report no memory
                static const std::bad_alloc nomem;
                _RAISE(nomem);
                }

        return (p);
        }

становится ясно, что operator new просто выделяет память, причём тем-же malloc — при неудачном выделении памяти — вызывает new_handler функцию и только потом (если ничего не изменилось) бросает исключение.
я ещё до сих пор на старом стандарте сижу, понемножку начал браться за С++11, руки дрожат..., а тут ещё С++14. С деталями разбираться веки вечные.
А Яндекс.Карты также без облаков?
Так и не понял, как работате first(std::get<Indices>(first_args)...)?
код, почему-то, тяжело читается.
А статья интересная — спасибо за перевод.

Хотел спросить — что насчёт
использовать объекты через границы процесса с сохранением возможности динамического связывания

и COM ? Как там с этим обстоят дела, кто знает?
имеенно об этом я и говорю — ничего о T* const Google C++ Style Guide не говорит.

И я ничего не говорил о передаче изменяемого параметра как const T* — имелось в виду, что Google C++ Style Guide если уж и что-то говорит о передаче параметров — то только о const T*, а не о T* const (или const T* const).
Меня просто не поняли, глупо получилось.
В Google C++ Style Guide идёт речь об const T*, тогда как в статье говорится о том, что Google C++ Style Guide рекомендует «константный указатель *const», т.е. T* const, что не одно и тоже. Смысл говорить об одном и давать ссылку на немножко другое? Ладно, не столь важно, статья не об этом.
об этом я и говорю — автор что-то напутал немножко.

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity