Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами сравнения? Допустим std::array<> имеет операторы сравнения, но не имеет удобных operator=(char *) и operator char, для взаимодействия со строковой константой "abcd". И не может быть ей инициализирован, приходиться писать: std::array<char, 50> a = {'a', 'b', 'c' }; что намного неудобней чем char a[] = "abc"; Т.е. из std полностью не подходит ни один из вариантов: динамические(string, vector<>), статические (char[], array<>). На основании каких стандартных средств лучше сделать статическую строку или может уже есть готовая в boost? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 14:17 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
статические строки, Тут есть два варианта. 1) Указывать длину строки аргументом шаблона и тогда строку можно хранить прямо в объекте 2) Если не указывать длину строки, то ее можно будет хранить только в куче Для п.1 я стандартных классов не знаю, но сделать такой класс чтобы его можно было инициализировать/присваивать строковым литералом элементарно С п.2 отлично справляется std::string ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 15:34 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
А что, оператор == для двух const char* не перегружается?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 16:41 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky1) Указывать длину строки аргументом шаблона и тогда строку можно хранить прямо в объекте Я когда то давно рисовал велосипед на тему строк, STL я не знал и не видел. Со всеми операторами сравнения конструкторами копирования итд итп Если размер строки меньше 8-16-32..... байт ( как задефайнишь) , строка лежит в стеке. Если больше это место в стеке используется как указатель на область памяти в куче и прочие параметры управления этой памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 16:50 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
ДохтаР, То что вы описали умеет std::string (по крайней мере в GCC). А требуется насколько я понял, чтобы был просто массив, вообще без оверхеда - ровно столько занимал на стеке сколько байтов в строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:28 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА что, оператор == для двух const char* не перегружается?.. Насколько я помню, в перегруженных глобальных операторах хотя бы один из аргументов должен быть классом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 18:31 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyтребуется насколько я понял, чтобы был просто массив, вообще без оверхеда - ровно столько занимал на стеке сколько байтов в строке. Константы-литералы лежат разве не в сегменте кода? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 19:46 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Прикольно. Написал программку: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Вот результат её работы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Всегда s5 == s1 ! Так зачем писать какой-то там ещё оператор ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 20:06 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
А так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. будет так: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 20:14 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
А так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. будет так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 20:17 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
В итоге вот такая вот программулина получилась: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. Работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 20:31 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovAnatoly Moskovskyтребуется насколько я понял, чтобы был просто массив, вообще без оверхеда - ровно столько занимал на стеке сколько байтов в строке. Константы-литералы лежат разве не в сегменте кода? Они там могут лежать. А могут и в сегменте данных лежать. Зависит от компилятора и настроек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 21:07 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky А требуется насколько я понял, чтобы был просто массив, вообще без оверхеда - ровно столько занимал на стеке сколько байтов в строке. manSYNOPSIS #include <alloca.h> void *alloca(size_t size); DESCRIPTION The alloca() function allocates size bytes of space in the stack frame of the caller. This temporary space is automatically freed when the function that called alloca() returns to its caller. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2013, 22:15 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
ДохтаРalloca Ну, оберните это в класс строки - посмотрим что выйдет :) ЗЫ. Я не говорю что нельзя - просто интересно что получится, т.к. у меня самого нет времени играться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 01:16 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyДохтаРalloca Ну, оберните это в класс строки - посмотрим что выйдет :) А вообще конечно alloca - это не то, т.к. цель не в стеке выделять, а в том же объекте, а тут alloca в пролете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 01:23 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyAnatoly Moskovskyпропущено... Ну, оберните это в класс строки - посмотрим что выйдет :) А вообще конечно alloca - это не то, т.к. цель не в стеке выделять, а в том же объекте, а тут alloca в пролете. Я знал что он в пролете вы просили в стеке переменное количество байт, я дал вариант . что касается в обьекте то плейсмент нью думаю подойдет class xxxstr { unsigened char x_buff[]; // можно лазить на всю длину памяти // полученную при плейсмент нью public: ..... }; Но я не совсем понимаю как это защищать от дурака. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 02:01 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Попробовал по возможности по максимуму использовать встроенные средства C++. Можно ли что-то упростить? Получилось: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. выводabcd (abcd == abcd) = true (abcd == qwerty) = false (abcd == zxcvb) = false (abcd == abcd) = false (qwerty == abcd) = false (qwerty == qwerty) = true (qwerty == zxcvb) = false (qwerty == abcd) = false (zxcvb == abcd) = false (zxcvb == qwerty) = false (zxcvb == zxcvb) = true (zxcvb == abcd) = false (abcd == abcd) = false (abcd == qwerty) = false (abcd == zxcvb) = false (abcd == abcd) = true abcd,qwerty,zxcvb,abcd, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 02:15 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Чуть поправил: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 02:51 |
|
||
|
Как лучше в C++ сделать статические строки по примеру char[], но с имеющимися операторами
|
|||
|---|---|---|---|
|
#18+
Вот, финальный вариант :) http://ideone.com/cEsNhZ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2013, 13:41 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38221807&tid=2020299]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
125ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 274ms |
| total: | 484ms |

| 0 / 0 |
