LINUX.ORG.RU
Ответ на: комментарий от ahonimous

я уже наивно проверил на gcc на msvc - ты не поверишь

Разумеется, я не поверю. Ты же малограмотный и упоротый идиот, а таким я не верю. Последний пост, ftgj.

class Obj
{
	public:
		Obj() {cout << __func__ << endl; }
		Obj(const Obj &src) {cout << __func__ << endl;}
		Obj operator=(const Obj &src) {cout << __func__ << endl;}
		~Obj() {cout << __func__  << endl;}

};

inline Obj f()
{
	Obj o;
	return o;
}

int main(int, char **)
{
	Obj o;
	o = f();
	return 0;
}

Obj
Obj
operator=
~Obj
~Obj
~Obj

Проверяй на gcc/msvc ;))

LamerOk ★★★★★
()
Ответ на: комментарий от shty

> я Вас не понимаю, что мешает сделать тоже самое с std::string (с учётом что исходная строка в нём родимом)?

а я вас не понимаю :) давайте сделаем проще, написать пример тут - несколько строк, давайте напишем примеры и сравним:

- цикл от 0 до 1000000;
- строка «AAAAAAAAAAA\nBBBBBBBBBBB\nCCCCCCCCCCCC\n» - в конце «контрольный» '\n', т.е. подстроки будет три
- в цикле разбиваем ее на подстроки

лады?

ahonimous
()
Ответ на: комментарий от ahonimous

давайте сделаем проще, написать пример тут - несколько строк, давайте напишем примеры и сравним:

оке

- цикл от 0 до 1000000;

зачем цикл?

- строка «AAAAAAAAAAA\nBBBBBBBBBBB\nCCCCCCCCCCCC\n» - в конце «контрольный» '\n', т.е. подстроки будет три

оке

- в цикле разбиваем ее на подстроки

что с подстроками делаем? выводим индексы или как?

shty ★★★★★
()
Ответ на: комментарий от Dendy

>Иногда руки чешутся написать:

void someFunction( const int someValue )

но это раскрывает детали реализации

1. Проприетарщик чтоле? Скрывает он... Вызывающий код никак не может завязаться на эту деталь, поэтому вреда этот «const» не нанесёт.

2. Ты можешь в хидере написать (int someValue) или даже (int), а в реализации ( const int someValue ).

legolegs ★★★★★
()
Ответ на: комментарий от shty

> что с подстроками делаем? выводим индексы или как?

ну давайте так

ahonimous
()
Ответ на: комментарий от LamerOk

Читай выше, «удивлятель» ;)))

Что вы пытались показать примером так и не понял. Именованые конструкторы имеют следующий синтакс, проверяйте:

int main(int, char **) 
{ 
   Obj o = f(); 
   return 0; 
}
Dendy ★★★★★
()
Ответ на: комментарий от Dendy

> Что вы пытались показать примером так и не понял

Плохо. Функция, написанная так, что её поведение завит от способа её вызова... _Теперь-то_ надеюсь, нутыпонел?

LamerOk ★★★★★
()
Ответ на: комментарий от shty

даже вот так, у меня под рукой завалялся кусочек кода, я его просто покажу

void split_string( const std::string& text,
                   const std::string& separators ) {

    size_t length = text.length();
    size_t current = text.find_first_not_of(separators);
    size_t end;

    while( current < length ) {
        end = text.find_first_of(separators, current);

        if( end > length )  {
            end = length;
        }
       
        // (current) - индекс начала куска текста
        // (end - current) - индекс окончания
        // делаем нашу магию :)

        current = text.find_first_not_of(separators, end + 1);
    }
}

оно конечно коряво несколько написано, ну да не будем придираться, идею показывает

и использование

std::string text, separators;
separators.push_back(0x0a); // '0x0a' is a hex value for '/n'

//load text somehow

split_string(text, separators);

как то так

shty ★★★★★
()
Ответ на: комментарий от LamerOk

> Плохо. Функция, написанная так, что её поведение завит от способа её вызова..

_Теперь-то_ надеюсь, нутыпонел?


поздравляю с новым открытием в жизни, и да - обычно в таких случаях признают свою неправоту, а не говорят «_Теперь-то_ надеюсь, нутыпонел?»

П.С. не стоит опять щедро раздавать эпитеты - я по-твоему примеру решил в этом топике больше тебе не отвечать

ahonimous
()
Ответ на: комментарий от LamerOk

>Ты дурачок, шотле? Сначала возвращаешь через стэк объект, а потом еще что-то там заикаешься про скорость?

RVO спасает очень хорошо безо всякого inline.

legolegs ★★★★★
()
Ответ на: комментарий от ahonimous

ну так там же все самое интересное :)

а что там интересного?

template<typename _iter>
void do_our_magic(_iter begin, _iter end) {
  // blah-blah
}

и используем

do_our_magic(&text[current], &text[end-current]);
shty ★★★★★
()
Ответ на: комментарий от legolegs

RVO, естественно, спасает, и на самом деле никакого криминала в возврате POD'а нет.

Но всё же, нужно понимать, что это - POD.

LamerOk ★★★★★
()
Ответ на: комментарий от ahonimous

а что там интересного?

ну вот как ты, например, эту подстроку на экран выведешь?

точно так же как и ты выведешь подстроку char* :) не веришь?

shty ★★★★★
()
Ответ на: комментарий от shty

> точно так же как и ты выведешь подстроку char* :) не веришь?

т.е. заменишь \n на 0 и вызовешь puts? если да - то к чему была, фраза, например, «clear() вызывай и будет весело и вкусно»?

ahonimous
()
Ответ на: комментарий от ahonimous

> точно так же как и ты выведешь подстроку char* :) не веришь?

т.е. заменишь \n на 0 и вызовешь puts?

ну, как вариант

или можно использовать, например, cout.write

если да - то к чему была, фраза, например, «clear() вызывай и будет весело и вкусно»?

это я просто Вас не понял :)

shty ★★★★★
()
Ответ на: комментарий от shty

ну на том и договорились :), итогом срача можно считать следующее:

1. RVO и NRVO это хорошо
2. работать с char* бывает полезно
3. никто так и не ответил ТС по сути

ahonimous
()
Ответ на: Ссылки vs Указатели от pathfinder

Я так понял следующее:

Ссылки легче поддаются оптимизации.

У ссылок может быть более приятный синтаксис.

Ссылке нельзя (по нормальному) присвоить NULL. И соответственно проверить на NULL.

Короче есть смысл использовать и ссылки и указатели в коде в зависимости от ситуации.

pathfinder ★★★★
()
Ответ на: комментарий от ahonimous

где пруф?

о525, я ж говорил - там где надо парсить текст, например самый популярный формат - XML:

http://xerces.apache.org/xerces-c/ http://sourceforge.net/projects/tinyxml/ http://rapidxml.sourceforge.net/

xml - это прекрасно, спору нет, но зачем там char*? конкретно укажите где он там требуется и не забывайте про &mystring[0]

shty ★★★★★
()
Ответ на: комментарий от shty

> конкретно укажите где он там требуется

«nodes and attributes do not own the text of their names and values. This is because normally they only store pointers to the source text.»

если еще есть вопросы - качай и смотри

ahonimous
()
Ответ на: комментарий от ahonimous

конкретно укажите где он там требуется

«nodes and attributes do not own the text of their names and values. This is because normally they only store pointers to the source text.»

если еще есть вопросы - качай и смотри

во-первых здесь ничего не говорится о реализации

во-вторых странные Вы делаете выводы из нашего общения, Вы всегда после того Вам было показано то или иное делаете прямо противоположный вывод?

и да, по ссылкам не пойду - буду Ъ :)

shty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.