Назад | Начало урока | Вперед
Содержание

Глава 3

Перегруженные операторы сравнения обычно применяются для сравнения
как целых строк, так и отдельных символов.

В следующем примере обратите внимание на гибкость типов аргументов
в левой и правой части операторов сравнения. Для повышения эффективности
в классе string определены перегруженные операторы для прямых сравнений
строковых объектов, литералов в кавычках и указателей на строки С;
это позволяет обойтись без содания временных объектов string.

Вверх


//: C03:Equivalence.cpp
#include <iostream>
#include <string>
using namespace std;

int main() {

string s2("That"), s1("This");
// В левой части находится литерал в кавычках,
// в правой части - объект string
if("That" == s2)
cout << "A match" << endl;
// В левой части находится объект string,
// а в правой - указатель на строку в стиле C,
// завершенную нуль-терминатором.
if(s1 != s2.c_str())
cout << "No match" << endl;
} ///:~


Результат:

A match
No match

Анализ:

Функция c_str() возвращает const char* - указатель на строку С, завершенную нуль-символом, которая эквивалентна текущему содержимому объекта string.(!) Такая возможность задействуется при передаче объектов string стандартным функциям С, например функции atoi() или любым функциям, определенным в заголовочном файле <string>. Использование значения, возвращаемого c_str(), в качестве неконстантного аргумента функции является ошибкой.

Среди операторов сравнения строк отсутствуют операторы логического отрицания (!) и конюнкции/дизъюнкции (так же вы не найдете перегруженных версий поразрядных операторов С &,|,^,~).

Перегруженные внешние операторы сравнения для класса string ограничиваются подмножеством, имеющим четкое однозначное применение к отдельным символам или их группам.


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz