Глава 3
Перегруженные операторы сравнения обычно применяются для сравнения
как целых строк, так и отдельных символов.
В следующем примере обратите внимание на гибкость типов аргументов
в левой и правой части операторов сравнения.
Для повышения эффективности
в классе string определены перегруженные операторы для прямых сравнений
строковых объектов, литералов в кавычках и указателей на строки С;
это позволяет обойтись без содания временных объектов string.
Вверх
int main() {
A match
Анализ:
Функция c_str() возвращает const char* - указатель на строку С, завершенную нуль-символом, которая эквивалентна текущему содержимому объекта string.(!) Такая возможность задействуется при передаче объектов string стандартным функциям С, например функции atoi() или любым функциям, определенным в заголовочном файле <string>. Использование значения, возвращаемого c_str(), в качестве неконстантного аргумента функции является ошибкой.
Среди операторов сравнения строк отсутствуют операторы логического отрицания (!) и конюнкции/дизъюнкции (так же вы не найдете перегруженных версий поразрядных операторов С &,|,^,~).
Перегруженные внешние операторы сравнения для класса string ограничиваются подмножеством, имеющим четкое однозначное применение к отдельным символам или их группам.
Назад |
Начало урока |
Вверх |
Вперед
//: C03:Equivalence.cpp
#include <iostream>
#include <string>
using namespace std;
// В левой части находится литерал в кавычках,
// в правой части - объект string
if("That" == s2)
// а в правой - указатель на строку в стиле C,
// завершенную нуль-терминатором.
if(s1 != s2.c_str())
Результат:
No match
Содержание