Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/55: Рейтинг темы: голосов - 55, средняя оценка - 4.95
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

Что такое std::string

30.10.2019, 21:59. Показов 11470. Ответов 68
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
int main(){
 
std::string s;
std::string st="it string";
for(int i=0; i<9; ++i){s[i]=st[i];};
 
 
std::cout << s;
 
}

скажите пожалуйста , что сейчас находится в s?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2019, 21:59
Ответы с готовыми решениями:

Что такое std::string()
И скал в гугле- там ничего понимаемого. Начну, что я вообще в символьных не шарю. Обьясните пожалуста, что это и что оно делает. ...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

Запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’
private: std::string firstName; }; std::string ClientData::getFirstName() const{ return firstName; } Дает в итоге...

68
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
02.11.2019, 19:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Croessmah Посмотреть сообщение
Цитата Сообщение от _stanislav Посмотреть сообщение
Если доступная реализация string построена на подсчете ссылок
Книжка не учитывает современные версии C++?
Устаревший компилятор или библиотека могут не вполне соответствовать современным стандартам. Кроме того, в программах и библиотеках бывают ошибки.

Но в целом согласен: если книга не устарела до того, как её напечатали, то устареет до того, как её успеешь прочитать.
0
3 / 2 / 1
Регистрация: 02.11.2019
Сообщений: 7
02.11.2019, 19:33
В цикле Вы делаете копирование в непроинициализированную переменную типа std::string - класс, который представляет собой строку.
Размер вашей строки s = 0. Проверьте с пом. s.length()

C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <string>
 
int main()
{
  std::string name;
  std::cout << name.length();
}
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
02.11.2019, 19:40
Цитата Сообщение от Алексей1153 Посмотреть сообщение
При многопоточности я обычно использую CString (MFC) или QString (Qt) - они юзают COW . . А ведь ни разу не поломалось, всё чётко, проектов много, потоков в них много. ... Видимо, подсчёт ссылок у них внутри синхронизирован
И в MFC подсчёт ссылок достаточно тормозной.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.11.2019, 19:41
Цитата Сообщение от Croessmah Посмотреть сообщение
Книжка не учитывает современные версии C++?
книжка 2001 года.
0
3 / 2 / 1
Регистрация: 02.11.2019
Сообщений: 7
02.11.2019, 19:43
Если сделать вот так
C++
1
{s.at(i)=st.at(i);};
то ошибка проявит себя примерно так:


terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::at: __n (which is 0) >= this->size() (which is 0)


И вообще копировать строки нужно с помощью оператора копирования, для этого они и были придуманы...
C++
1
std::string s = s1;
А класс string сам разберет, что ему нужно для копирования.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.11.2019, 19:47
Croessmah, это Мейерс говорит о слухах которые утверждали, что STL не безопасен?, на форуме тут один чел долго помню спорил, у него на аватарке колесо вроде нарисовано или типа того.

Добавлено через 1 минуту
сейчас наверно с стандартной многопоточностью, поправили реализацию?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
02.11.2019, 20:04
_stanislav, у каждого вендора может быть не одна реализация.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
02.11.2019, 20:51
Цитата Сообщение от _stanislav Посмотреть сообщение
это Мейерс говорит о слухах которые утверждали, что STL не безопасен?
До C++11 std::string мог быть реализован с помощью COW, и даже не было требования хранить символы массивом друг за другом.
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.11.2019, 21:12
Цитата Сообщение от Croessmah Посмотреть сообщение
До C++11 std::string мог быть реализован с помощью COW, и даже не было требования хранить символы массивом друг за другом.
Вряд ли std::string мог быть реализован как copy-on-write. С неконстантными итераторами и прямым доступом к буферу это был бы жуткий уродец.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
02.11.2019, 21:32
oleg-m1973, мы, вроде, о спецификации, а не о реализации.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.11.2019, 21:35
Цитата Сообщение от Croessmah Посмотреть сообщение
oleg-m1973, мы, вроде, о спецификации, а не о реализации.
А что, спецификация разве не определяет реализацию, вернее не ограничивает?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
02.11.2019, 21:42
Лучший ответ Сообщение было отмечено politoto как решение

Решение

oleg-m1973, вот пример с gcc 4.9.1
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main()
{
    std::string s1 = "ohh";
    std::string s2 = s1;
    std::cout << (void*)s1.data() << " - " << (void*)s2.data() << std::endl;
    s2[0] = 'a';
    std::cout << (void*)s1.data() << " - " << (void*)s2.data() << std::endl;
    std::cout << s1 << " - " << s2 << std::endl;
}
0xb5fd88 - 0xb5fd88
0xb5fd88 - 0xb5fdb8
ohh - ahh
https://wandbox.org/permlink/M4CEVvKZzK7gBEqX
2
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
02.11.2019, 21:52
Цитата Сообщение от pcmax Посмотреть сообщение
скажите пожалуйста , что сейчас находится в s?
Вот, например, не самая свежая реализация

Code
1
2
g++ (Debian 4.7.2-5) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
int main()
{
    std::string
        non_terminated{'\0','1','2',},
        terminated{ "12" },
        empty{ },
        s;
    
 
    std::string
        copy_terminated{ terminated, },
        copy_nonterminated{ non_terminated, },
        s_copy{s};
 
    s = non_terminated;
    non_terminated = copy_terminated;
 
    terminated[0]='\0';
 
    return sizeof s;
}
C++
1
2
g++ -std=c++11 -g string.cxx -o string
gdb string
Разворачиваем скрытый текст и наблюдаем построчно, как конструируются экземпляры std::string, и что с ними происходит при изменениях.

Кликните здесь для просмотра всего текста
Temporary breakpoint 1, main () at string.cxx:5
5
C++
1
non_terminated{'\0','1','2',},
$1 = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x8048a5b "\201\303\355\022"}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x0}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x8048a5b "\201\303\355\022"}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x48ba00d0 "U\211\345WVS\350", <incomplete sequence \375\224>}}
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x48be7035 "\203\304\030[Í\213\214\021"}}
6
C++
1
terminated{ "12" },
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x48be7035 "\203\304\030[Í\213\214\021"}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x48ba00d0 "U\211\345WVS\350", <incomplete sequence \375\224>}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x0}}

5: non_terminated.length() = 3
7
C++
1
            empty{ },
5: non_terminated.length() = 3
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x48be7035 "\203\304\030[Í\213\214\021"}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x48ba00d0 "U\211\345WVS\350", <incomplete sequence \375\224>}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
8
C++
1
s;
5: non_terminated.length() = 3
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x48be7035 "\203\304\030[Í\213\214\021"}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
12
C++
1
copy_terminated{ terminated, },
5: non_terminated.length() = 3
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
6: copy_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0xbffffc8c "\315\375\377\277\335\375\377\277\350\37 5\377\277\070\376\377\277E\376\377\277T\ 376\377\277_\376\377\277m\376\377\277y\3 76\377\277\220\376\377\277\335\376\377\2 77\350\376\377\277"}}
13
C++
1
copy_nonterminated{ non_terminated, },
6: copy_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
5: non_terminated.length() = 3
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
7: copy_nonterminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0xbffffc84 "\266\375\377\277"}}
14
C++
1
s_copy{s};
7: copy_nonterminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
6: copy_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
5: non_terminated.length() = 3
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
8: s_copy = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x1 <Address 0x1 out of bounds>}}
16
C++
1
s = non_terminated;
8: s_copy = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
7: copy_nonterminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
6: copy_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
5: non_terminated.length() = 3
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
17
C++
1
non_terminated = copy_terminated;
8: s_copy = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
7: copy_nonterminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
6: copy_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
5: non_terminated.length() = 3
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
19
C++
1
terminated[0]='\0';
8: s_copy = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
7: copy_nonterminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
6: copy_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
5: non_terminated.length() = 2
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
21
C++
1
return sizeof s;
8: s_copy = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
7: copy_nonterminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
6: copy_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
5: non_terminated.length() = 2
4: s = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a014 ""}}
3: empty = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x491e3f60 ""}}
2: non_terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a02c "12"}}
1: terminated = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>},
_M_p = 0x804a044 ""}}


p terminated.length()
$2 = 2
p terminated[1]
$3 = (const char &) @0x804a045: 50 '2'
p terminated.data()
$4 = 0x804a044 ""
p terminated.begin()
$5 = {_M_current = 0x804a046 ""}
p terminated.end()
$6 = {_M_current = 0x804a044 ""}
$7 = 2
$8 = 0x804a02c "12"
$9 = 0x804a02c "12"
Continuing.
[Inferior 1 (process 23504) exited with code 04]
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.11.2019, 21:54
Цитата Сообщение от Croessmah Посмотреть сообщение
oleg-m1973, вот пример с gcc 4.9.1
Да, не знал. Позже посмотрю, что это было. Но - недолго продержалось - в 5-м уже
C++
1
2
3
0x7ffc47c58ad0 - 0x7ffc47c58ab0
0x7ffc47c58ad0 - 0x7ffc47c58ab0
ohh - ahh
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
02.11.2019, 22:06
Пользователь вправе ожидать корректной и разумной реализации от вендора, но проверить свои предположения никогда не помешает.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
02.11.2019, 22:12
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Позже посмотрю, что это было.
Это был COW. В C++11 требования к std::string поменялись.
В версии 5 gcc поменяли COW на SSO.
https://gcc.gnu.org/gcc-5/changes.html
A new implementation of std::string is enabled by default, using the small string optimization instead of copy-on-write reference counting.
1
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.11.2019, 22:17
Цитата Сообщение от Croessmah Посмотреть сообщение
Это был COW. В C++11 требования к std::string поменялись.
В версии 5 gcc поменяли COW на SSO.
Т.е. это было даже без SSO? Жесть.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.11.2019, 22:37
Цитата Сообщение от Croessmah Посмотреть сообщение
SSO
Что значат эти буквы? Копирование при записи понятно, ленивая реализация, а SSO чего такое? И как эти две идиомы связанны?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
02.11.2019, 22:38
Цитата Сообщение от _stanislav Посмотреть сообщение
а SSO чего такое?
small string optimization - если просто, то это когда символы сохраняются непосредственно в объекте string, без выделения динамической памяти.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
03.11.2019, 08:34  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
но вообще, не могу придумать случая, когда это может помешать. Разве что тот случай, когда аргумент функции имеет именно тип std::vector<char>
вектор на первый взгляд просто убогость.

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


[CPP]

#include <iostream>
#include <vecktor>



int main(){

std::vecktor<int>vk;

vk.reserve(3);

vk[0]=1;
vk[1]=2;
vk[2]=3;
vk.resize(4);

vk[3]=4;

for(int i=0; i<4; ++i){std::cout << vk[i];
}

чего -то при выводе вектора получаю нули.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2019, 08:34

что такое std::out
люди, в общем препод нам попался из разряда &quot;пришел унизился ушел&quot; ты ему слово, он тебе в ответ десять вопросов он задал мне банальый...

Что такое std::allocator<T> ?
я так понял возвращает адрес чего то?

std::map что такое и с чем это есть
попытался найти док-ию по map, но так и не нащёл. есть у кого ли нормальная док-ия по Map?

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Что означает std::string to_string( int value )?
Что означает: std::string to_string( int value )


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru