История изменений
Исправление Isur, (текущая версия) :
нет там строк, ни в С, ни в С++ – тебя обманули. даже массивов многомерных и нормальных векторов – их тоже нет.
а настоящих массивов над ними нет – в plain C. типа настоящих матриц и векторов, как в том же фортране или паскале.
в С++ их – сюрприз, тоже нет. только есть всякие разные обёртки над C одномерными массивами.
по этой самой причине, строк в C и в С++ — тоже нет.
вот в D например, есть строки. в Go есть строки. потому что есть слайсы массивов и автоматическая функция длины. а в С/С++ строк нет – просто обёртки над DB(???) в ассемблере.
по этой же самой причине различные типы классов-обёрток в С++ изобретают неоднократно: в каком-нибудь std:: затем в Qt или еще где.
ах, да. потом еще кодировки строк. то есть – нормальная интеграция со встроенным типом строк должна поддерживать например, кодировки и/или уникодность.
Строк нет, но строковые данные есть, потому как любые данные бывают либо строковые, либо бинарные.
Допустим читаем у Праты, что для описания строковых данных нужно использовать тип string из библиотеки string, потом, когда проходим указатели, узнаём, что строку также можно прописать через указатель на первый символ строки, то есть char* что да является полным аналогом db в ассемблере за той разницей, что тут символ конца строки не вписывается, потом узнаём, что string и wsting - это на самом деле классы, и только в конце книги в приложении Е раскрываются все фишки класса string. Из-за такой дурацкой компановки книги, я и предпочёл изучать C++ по четырём книгам одновременно.
А если считать, что string, iostream и всё что называется «стандартной библиотекой» частью языка С++ не являются, то да, можно сказать, что строк как таковых в C++ нет и вообще это язык низкого уровня. Я когда-то хотел освоить ассемблер, даже полностью освоил книжку Пильщикова, где описывается программирование под DOS, хотел освоить сложный язык в котором нет ООП, но когда добрался до «Уроков Iczelion’а», где описывается, что для вызова простейшей функции WinAPI нужно перед call передать через стек 10 параметров, а также адрес памяти, указывающий на структуру, которая содержит ещё 10 параметров, после чего понял, что эта структура и есть объект и язык с поддержкой ООП-парадигмы был бы удобнее.
1.4. четвертый параметр – указатель на значение любого типа
Но при этом мы знаем, что данные там тоже строковые. Вопрос, если тип void* то как выполнять строковые операции, например скопировать строку из одной области памяти в другую, если бы был string, то там простым присваиванием переменной можно было бы провернуть, а тут как? А конкатенацию строк как делать?
Исправление Isur, :
нет там строк, ни в С, ни в С++ – тебя обманули. даже массивов многомерных и нормальных векторов – их тоже нет.
а настоящих массивов над ними нет – в plain C. типа настоящих матриц и векторов, как в том же фортране или паскале.
в С++ их – сюрприз, тоже нет. только есть всякие разные обёртки над C одномерными массивами.
по этой самой причине, строк в C и в С++ — тоже нет.
вот в D например, есть строки. в Go есть строки. потому что есть слайсы массивов и автоматическая функция длины. а в С/С++ строк нет – просто обёртки над DB(???) в ассемблере.
по этой же самой причине различные типы классов-обёрток в С++ изобретают неоднократно: в каком-нибудь std:: затем в Qt или еще где.
ах, да. потом еще кодировки строк. то есть – нормальная интеграция со встроенным типом строк должна поддерживать например, кодировки и/или уникодность.
Строк нет, но строковые данные есть, потому как любые данные бывают либо строковые, либо бинарные.
Допустим читаем у Праты, что для описания строковых данных нужно использовать тип string из библиотеки string, потом, когда проходим указатели, узнаём, что строку также можно прописать через указатель на первый символ строки, то есть char* что да является полным аналогом db в ассемблере за той разницей, что тут символ конца строки не вписывается, потом узнаём, что string и wsting - это на самом деле классы, и только в конце книги в приложении Е раскрываются все фишки класса string. Из-за такой дурацкой компановки книги, я и предпочёл изучать C++ по четырём книгам одновременно.
А если считать, что string, iostream и всё что называется «стандартной библиотекой» частью языка С++ не являются, то да, можно сказать, что строк как таковых в C++ нет и вообще это язык низкого уровня. Я когда-то хотел освоить ассемблер, даже полностью освоил книжку Пильщикова, где описывается программирование под DOS, хотел освоить сложный язык в котором нет ООП, но когда добрался до «Уроков Iczelion’а», где описывается, что для вызова простейшей функции WinAPI нужно перед call передать через стек 10 параметров, а также адрес памяти, указывающий на структуру, которая содержит ещё 10 параметров, после чего понял, что эта структура и есть объект и язык с поддержкой ООП-парадигмы был бы удобнее.
1.4. четвертый параметр – указатель на значение любого типа
Но при этом мы знаем, что данные там тоже строковые. Вопрос, если тип void* то как выполнять строковые операции, например переслать строку из одной области памяти в другую, если бы был string, то там простым присваиванием переменной можно было бы провернуть, а тут как? А конкатенацию строк как делать?
Исправление Isur, :
нет там строк, ни в С, ни в С++ – тебя обманули. даже массивов многомерных и нормальных векторов – их тоже нет.
а настоящих массивов над ними нет – в plain C. типа настоящих матриц и векторов, как в том же фортране или паскале.
в С++ их – сюрприз, тоже нет. только есть всякие разные обёртки над C одномерными массивами.
по этой самой причине, строк в C и в С++ — тоже нет.
вот в D например, есть строки. в Go есть строки. потому что есть слайсы массивов и автоматическая функция длины. а в С/С++ строк нет – просто обёртки над DB(???) в ассемблере.
по этой же самой причине различные типы классов-обёрток в С++ изобретают неоднократно: в каком-нибудь std:: затем в Qt или еще где.
ах, да. потом еще кодировки строк. то есть – нормальная интеграция со встроенным типом строк должна поддерживать например, кодировки и/или уникодность.
Строк нет, но строковые данные есть, потому как любые данные бывают либо строковые, либо бинарные.
Допустим читаем у Праты, что для описания строковых данных нужно использовать тип string из библиотеки string, потом, когда проходим указатели, узнаём, что строку также можно прописать через указатель на первый символ строки, то есть char* что да является полным аналогом db в ассемблере за той разницей, что тут символ конца строки не вписывается, потом узнаём, что string и wsting - это на самом деле классы, и только в конце книги в приложении Е раскрываются все фишки класса string. Из-за такой дурацкой компановки книги, я и предпочёл изучать C++ по четырём книгам одновременно.
А если считать, что string, iostream и всё что называется «стандартной библиотекой» частью языка С++ не являются, то да, можно сказать, что строк как таковых в C++ нет и вообще это язык низкого уровня. Я когда-то хотел освоить ассемблер, даже полностью освоил книжку Пильщикова, где описывается программирование под DOS, хотел освоить сложный язык в котором нет ООП, но когда добрался до «Уроков Iczelion’а», где описывается, что для вызова простейшей функции WinAPI нужно перед call передать через стек 10 параметров, а также адрес памяти, указывающий на структуру, которая содержит ещё 10 параметров, после чего понял, что эта структура и есть объект и язык с поддержкой ООП-парадигмы был бы удобнее.
1.4. четвертый параметр – указатель на значение любого типа
Но при этом мы знаем, что данные там то же строковые. Вопрос, если тип void* то как выполнять строковые операции, например переслать строку из одной области памяти в другую, если бы был string, то там простым присваиванием переменной можно было бы провернуть, а тут как? А конкатенацию строк как делать?
Исходная версия Isur, :
нет там строк, ни в С, ни в С++ – тебя обманули. даже массивов многомерных и нормальных векторов – их тоже нет.
а настоящих массивов над ними нет – в plain C. типа настоящих матриц и векторов, как в том же фортране или паскале.
в С++ их – сюрприз, тоже нет. только есть всякие разные обёртки над C одномерными массивами.
по этой самой причине, строк в C и в С++ — тоже нет.
вот в D например, есть строки. в Go есть строки. потому что есть слайсы массивов и автоматическая функция длины. а в С/С++ строк нет – просто обёртки над DB(???) в ассемблере.
по этой же самой причине различные типы классов-обёрток в С++ изобретают неоднократно: в каком-нибудь std:: затем в Qt или еще где.
ах, да. потом еще кодировки строк. то есть – нормальная интеграция со встроенным типом строк должна поддерживать например, кодировки и/или уникодность.
Строк нет, но строковые данные есть, потому как любые данные бывают либо строковые, либо бинарные.
Допустим читаем у Праты, что для описания строковых данных нужно использовать тип string из библиотеки string, потом, когда проходим указатели, узнаём, что строку также можно прописать через указатель на первый символ строки, то есть char* что да является полным аналогом db в ассемблере за той разницей, что тут символ конца строки не вписывается, потом узнаём, что string и wsting - это на самом деле классы, и только в конце книги в приложении раскрываются все фишки этих классов. Из-за такой дурацкой компановки книги, я и предпочёл изучать C++ по четырём книгам одновременно.
А если считать, что string, iostream и всё что называется «стандартной библиотекой» частью языка С++ не являются, то да, можно сказать, что строк как таковых в C++ нет и вообще это язык низкого уровня. Я когда-то хотел освоить ассемблер, даже полностью освоил книжку Пильщикова, где описывается программирование под DOS, хотел освоить сложный язык в котором нет ООП, но когда добрался до «Уроков Iczelion’а», где описывается, что для вызова простейшей функции WinAPI нужно перед call передать через стек 10 параметров, а также адрес памяти, указывающий на структуру, которая содержит ещё 10 параметров, после чего понял, что эта структура и есть объект и язык с поддержкой ООП-парадигмы был бы удобнее.
1.4. четвертый параметр – указатель на значение любого типа
Но при этом мы знаем, что данные там то же строковые. Вопрос, если тип void* то как выполнять строковые операции, например переслать строку из одной области памяти в другую, если бы был string, то там простым присваиванием переменной можно было бы провернуть, а тут как? А конкатенацию строк как делать?