Наредби_во_C++
Кои членски функции од std::string мора да бидат членски функции? Зошто? Како прв чекор, да ги одвоиме оние операции кои едноставно мора да бидат членски функции. На почетокот на листата има неколку кои се очигледни. Конструктори (6) Деструктор Оператори Оператори за задача (3) [] оператори (2) Воие оператори мора да бидат членови. Невозможно е да се напише конструктор, деструктор, оператор за задача или [] оператор на било кој друг начин. Операции кои мора да бидат членови Кои членски функции од std::string треба да бидат членови? Зошто? На кои операции им треба пристап до внатрешните податоцикои инаку треба да ги дадеме преку пријателство? Јасно е дека овие имаат причина да бидат членови и нормално треба да бидат. Оваа листа ги вклучува следните, од кои некои обезбедуваат индиректен пристап до (на пример begin) или ја менуваат (на пример  reserve)внатрешната состојба на низата: Овие треба да бидат членови не само затоа што тие се цврсто поврзани со basic_string (основната низа) туку исто така бидејќи го формираат јавниот интерфејс кој нечленските и непријетелските функции треба да го користат. Секако, овие можете да ги примените како нечленски функции, но зошто? (всушност има причина која можеби ќе ја претпочитате з ада напишете нечленски непријателски верзии исто такакои едноставно преминуваат кон членовите, имено униформност на интерфејсот; ова повторно ќе се дискутира понатаму) На прашањето за insert, erase, и replace ќе се навратиме малку подоцна. Особено за replace важно е да можете добро да одберете и да ја направите најфлексибилната фундаментална верзиај (верзии)во членот (членовите). Во акција: Можно-спорни операции кои можат да бидат нечленски непријателски - Прво во овој дел, дозволете ми да направам импресивна имитација на громобран истакнувајќи дека сите од следниве функции имаат нешто фундаментално заедничко, имено: секоја може очигледно лесно и делотворно да биде нечленска непријателска. - Се разбира дека можат да бидат нечленски непријателски; тоа е очигледно, лесно. Се разбира дека овие функции исто така понекогаш можат да имаат и нешто друго прилично фундаментално заедничко: тие се споменати во контејнерот на библиотеката на стандарди и низата на барања како членски функции. - земете ја empty како пример. Дали можеме да ја имплементираме како нечленска непријателска? Секако ...самиот стандард го бара следното однесување на basic_string::empty, - Па, сега, прилично е лесно да се запише како нечленска без да се изгуби ефикасност: - Се разбира, ако претходно немавме големина, имплементацијата на empty како нечленска непријателска немаше а биде возможно. Алтернативно (и со во некои случаи посигурна изведба) би можеле да ја имплементираме како: Колку посебни грешки траба да се пријават кога се компајлира следниот код на согласен (соодветен) Ц++ компајлер? Краткиот одговор е нула. Овој код е совршено легален и во согласност со стандардите (без разлика дали неговиот автор го сакал тоа или не). Да ги разгледаме еден по еден сите изрази кои можат да бидат сомнителни и да видиме зошто тие навистина се во ред: - 0[p]е легален и има точно исто значење со p[0]. Во Ц (и Ц++), изразот на формата  x[y], каде еден од  x и y е тип на покажувач а другиот е целобројна вредност, секогаш значи *(x+y). Во овој случај, 0[p] и p[0] имаат исто значење бидејќи тие значат *(0+p) и *(p+0), поединечно, што води до истата работа.