- 1
- 2
- 3
String testName;
//...
std::swap(testName, _testName);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+15
String testName;
//...
std::swap(testName, _testName);
String из thirdparty-библиотеки, а swap везде в нашем коде. По очевидным причинам получаем подение производительности.
каждый раз я вижу как народ в С/С++ извращается с ручной оптимизацией строковых операций, я всегда вспоминаю жабу и ее stringbuilder и бенчмарки согласно которым все чики-пыки.
> работает достаточно быстро
1/0
> раше
ну конечно же
ага. и гарбадж коллекшн это просто задвиг пойнтера назад.
Ну да, правда с небольшими дополнениями.
P.S. Кстати, если серьезно, то если объектов выживает мало - это и есть немного копирований и задвиг поинтера назад.
I think it's impossible.
Boost manual says: The supplied function and class templates can be used to prevent these problems, as they require a complete type, and cause a compilation error otherwise.
So, it's just compile-time assertion check and nothing more. You can't write a trait for incomplete type detection.
http://liveworkspace.org/code/2dkPlT$46
С какого перепугу SFINAE перестал в gcc работать или он и не работал никогда?
Короче это делается как-то так.
C++98 standard says: [5.3.3/1 Sizeof] The sizeof operator shall not be applied to an expression that has function or incomplete type, or to an enumeration type before all its enumerators have been declared, or to the parenthesized name of such types, or to an lvalue that designates a bit-field.
And you are using sizeof(T) in True1. So...
Емнип SFINAE работает только при некорректности типов, но не значений. А здесь некорректно именно значение, а тип вполне определен.
Дифолтные аргументы часть инстанцирования самого шаблона. В бусте нечто подобное местами встречается.
Lisp govno tense.
уже одно это эпично