Форум программистов, компьютерный форум CyberForum.ru

Могут ли две string разделять одни данные? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Необработанное исключение http://www.cyberforum.ru/cpp-beginners/thread1102682.html
Здравствуйте. Нужно добавить в готовый класс свои функции из предыдущих работ. Все добавил, но при вызове функции "cdd" вылезает ошибка "Необработанное исключение в "0x00f12afb" в "eta.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdfd".". Попробовал запустить старое задание, из которого я взял код и добавил сюда - тоже не работает. Хотя на университетских компьютерах все работало....
C++ Функция с неограниченным количеством аргументов Вообщем проблема: написал функцию неограниченным количеством аргументов под виндой (компилятор mingw) все работает как часы, но под unix (компилятор gcc) начинаются проблемы, а точнее правильно берет только 1 аргумент, а остальные берет от балды (-1633125008 327571911603200 32675 1900239536 и.т.д). Ребят помогите, что и где я накосячил? http://www.cyberforum.ru/cpp-beginners/thread1102676.html
Найти сумму отрицательных элементов расположенных на главной диагонали матрицы C++
Задана матрица A 1.Найти сумму отрицательных элементов расположенных на главной диагонали 2.Найти максимальный элемент среди положительных элементов 3 строки 4 столбца и его местоположение 3.заменить найденный максимальный элемент на сумму положительных элементов 2 строки.
C++ Можно ли объявить дружественную функцию как шаблон?
Так всё работает: template<class T> class random { /*всячина*/ public: friend void function(random<int>&); /*всячина*/
C++ Задача : Обход шахматной доски конем С++ рекурсия http://www.cyberforum.ru/cpp-beginners/thread1102661.html
Доброго времени суток ! Есть задача , обойти всю шахматную доску фигурой конь , не наступая на одну и туже клетку 2 раза , решить ее нужно с помощью рекурсии. По примеру этого кода , нужно написать программу. Выручайте ! #include <Windows.h> #include <iostream> using namespace std; const int Y = 20, X = 50; void fill(int a, int y, int x); void drawField(int a);
C++ Цикл For. Вычислить значение функции #include <iostream> #include <conio.h> #include <math.h> using namespace std; int main () { float x_start=1.0,x_step=0.3,x_end=2.5; float a=-1.5,b=2.0,c=3.0,d=4.0; подробнее

Показать сообщение отдельно
DrOffset
7058 / 4199 / 949
Регистрация: 30.01.2014
Сообщений: 6,965
22.02.2014, 20:09     Могут ли две string разделять одни данные?
Цитата Сообщение от Jupiter Посмотреть сообщение
стандарт с++ не дает таких гарантий, потому это
Ну вообще-то, если быть точным, стандарт С++11 как раз дает гарантии что строка std::string точно не будет реализована через COW.
В соответствии с пунктом 6 параграфа 21.4.1 ссылки и итераторы могут быть невалидными только в случаях:
— as an argument to any standard library function taking a reference to non-const basic_string as an
argument.
— Calling non-const member functions, except operator[], at, front, back, begin, rbegin, end, and
rend.
В случае COW строки вызов operator[] может потребовать сделать копию, что приведет существующие ссылки (полученные например через front()) в невалидное состояние, а это прямо запрещено вышеуказанным параграфом.
Для стандартов ниже С++11 - это было действительно implementation-defined.

Добавлено через 6 минут
Мне нужно, чтобы во всех трех местах ссылка сохранилась. std::string может мне такое обеспечить?
Можно попробовать вот этот класс.
Либо вот этот подход. (string_view)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru