- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
MYCString myexport
operator+(const MYCString& s, const char* pstr)
{
return MYCString(s, pstr); // Use the special concatenation constructor
}
MYCString myexport
operator+(const char* c, const MYCString& s)
{
return MYCString(c) + s.data();
}
MYCString myexport
operator+(const MYCString& a, const MYCString& s)
{
return a + s.data();
}
pushkoff 02.07.2010 12:47 # −1
a+b = c;
Lexey 07.07.2010 20:58 # +1
Да и при текущем стандарте возврат константного значения убивает некоторые потенциальные оптимизации
Говногость 07.07.2010 21:36 # 0
1)Можно на ссылочки пофапать поглядеть?
2)Какие оптимизации это убивает?
pushkoff 07.07.2010 23:32 # 0
Lexey 08.07.2010 18:09 # 0
2) Убивается возможность copy elision.
WebKill_HochetVBan 08.07.2010 18:19 # 0
Очень нестандартное утверждение... %) Нужно поразбираться...
pushkoff 02.07.2010 12:49 # 0
DarthBobr 02.07.2010 13:08 # −3
Класс строки вообще зачетный. В этом же классе под деструктором стоит комент, в котором пейсатель сего класса говорит, что он сделал деструктор невиртуальным, чтоб избежать создания таблицы виртуальных методов и поэтому использовать сей класс надо с осторожностью, так как много других классов наследуются от данного. Всё бы ничего, но в этом классе вообще нет виртуальных методов, и виртуальный деструктор просто нафиг не нужен.
gpr 02.07.2010 19:57 # +3
ошибаешься
Виртуальный деструктор нужен, если объекты удаляются через указатель на базовай объект
Хорошее правило - если от класса будут наследоваться, в нем нужен виртуальный деструктор
Что хотел сказать индус (предположение) - не удаляйте эти объекты через указатели не родительские. А от виртуального деструктора отказался в пользу эффективности (взяв пример со стандартной библиотеки, например)
Dummy00001 03.07.2010 14:40 # 0
pushkoff 03.07.2010 15:20 # 0
Dummy00001 03.07.2010 15:24 # 0
Kirinyale 03.07.2010 15:40 # 0
если должен и помечен, значит последним оператором уже не обойтись...
pushkoff 03.07.2010 15:53 # 0
Kirinyale 03.07.2010 15:58 # 0
MYCString a("string1");
a = a + MYCString("string2");
а вот так уже нет:
MYCString a("string1");
a = a + "string2";
pushkoff 03.07.2010 21:34 # +1
Kirinyale 03.07.2010 21:53 # 0
absolut 04.07.2010 09:02 # −2
Lexey 07.07.2010 21:00 # +1
Говногость 07.07.2010 21:40 # 0
pushkoff 07.07.2010 23:40 # 0
class Vector
{
Vector( float x ){}
Vector& operator = (const Vector& other)
{
}
} vec;
такая строка будет работать
vec = 3.0f;
Lexey 08.07.2010 18:04 # 0
absolut 02.07.2010 19:55 # 0
А зачем ? Создавался в доSTLевскую эру или почему ?
DarthBobr 02.07.2010 21:32 # +1