LINUX.ORG.RU

Ответ на: комментарий от wolverin

о — кстати... можешь написать пропозал в комитет по стандартизации с++ с изменением поведения std::string (на самом деле енто юзинг на std::basic_string<CharType>) — вдруг они даже его примут...

safocl ★★
()
Последнее исправление: safocl (всего исправлений: 1)
Ответ на: комментарий от wolverin

Уже ведь говорили про DEBUG режим stl, получишь желаемые проверки на каждый чих.

А pop_back() не имеет проверок видимо потому, что в реальности оно обычно так, а не иначе:

while (! empty())
    if (str.back() == 'q')
        str.pop_back();

а ты хочешь какую-то дичь, дропать без всякого представления о том что ты там дропаешь. Что-то проверять в pop_back() нужно лишь тебе и Валерке.

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

«The elements of a basic_string are stored contiguously, that is, for a basic_string s, &*(s.begin() + n) == &*s.begin() + n for any n in [​0​, s.size()), and *(s.begin() + s.size()) has value CharT() (a null terminator) (since C++11); or, equivalently, a pointer to s[0] can be passed to functions that expect a pointer to the first element of an array (until C++11)a null-terminated array (since C++11) of CharT.»

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

прочти хотя бы цппреференс сайт... очень удобный — в стандарте конечно не так удобно все искать — а там уже многое (почти все) распределили идеалогически совместно.

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

Ты путаешь с implementation specific

Если уж ты и взялся учить меня терминам, то то, что ты указываешь, скорее всего называется Unspecified Behavior. Так вот Unspecified Behavior из стандарта C++17:

behavior, for a well-formed program construct and correct data, that depends on the implementation [ Note: The implementation is not required to document which behavior occurs. The range of possible behaviors is usually delineated by this International Standard. — end note ]

подсказываю, куда смотреть: for a well-formed program

А я в том своем сообщении рассказываю про поведение для std::string::pop_back() для пустой строки, про которое явно написано: The behavior is undefined if the string is empty.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)

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

Впереди много интересного. Дальше ты узнаешь как с ничего получить N гигабайтный файл заполненный нулями «с чего-то вдруг» получив «такую длину» смапленного в память файла.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от rumgot

подсказываю, куда смотреть: for a well-formed program

ну тут ты не верно указываешь куда там смотреть — это лишь означает, что такой код собирается — тоесть валиден с точки зрения синтаксиса. Однако UB тоже у well-formed программ происходит. Там важно выделить that depends on the implementation

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

это лишь означает, что такой код собирается — тоесть валиден с точки зрения синтаксиса

Well-formed - это не только валидность с точки зрения синтаксиса. Следовательно ill-formed - это не обязательно только то, что не компилируется. Прочитай стандарт или cppreference хотя бы.

Вернемся к сути. Я писал про UB потому что в случае с std::string::pop_back() на пустой строке - это UB. Что не так? Тебя несет в сторону от моего утверждения и товарища тоже.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от rumgot

Well-formed - это не только валидность с точки зрения синтаксиса. Следовательно ill-formed - это не обязательно только то, что не компилируется. Прочитай стандарт или cppreference хотя бы.

вот тут указано, что я прав?

ну и обратное

safocl ★★
()
Ответ на: комментарий от safocl
well-formed program
C ++ program constructed according to the syntax rules, diagnosable semantic rules, and the one-definition
rule

diagnosable semantic rules - а это что?

https://en.cppreference.com/w/cpp/language/ub

ill-formed, no diagnostic required - the program has semantic errors which may not be diagnosable in general case (e.g. violations of the ODR or other errors that are only detectable at link time). The behavior is undefined if such program is executed.

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

семантические правила только в компайл тайме — за его пределы они не выходят. Как и ОДР. Я по сути все это и имел ввиду высказывась выше — но выразился одним словом про синтаксис...
Но ill-formed программа не может собраться — любое нарушение синтаксиса, семантики или odr — вызывает ошибку компиляции — ты же заявляешь, что при этом не обязательно прога должна не собраться.

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

кстати на цппреференсе похоже устарелая инфа, либо неверная — поскольку в стандарте иное указано — я выше скидывал... и в стандарте well-formed исключительно то, что собирается — другое ill-formed.

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

какое к примеру? — на ум только наследование можно привести... ну и то хз — там данные сырые получил и взял их использовать как тебе хочется — ты про енто чо ли?

safocl ★★
()
Последнее исправление: safocl (всего исправлений: 1)