Другие языки программирования и технологии

c++, переменные ...

Переменные каких типов можно сравнивать между собой, что бы компилятор не ругался .
Пытался сравнить char и string, неудачно видимо ...
Переменные РОДСТВЕННЫХ типов.
Либо, если есть перегруженные операторы сравнения для данной пары типов, причем, один из них обязательно должен быть пользовательским (класс, структура, объединение) , т. к. для встроенных типов операторы не перегружаются.

char short int long - суть ЦЕЛЫЕ, только разрядная сетка разная.
string - вообще класс, и если нет у него конструктора приведения типа string(const char& ), то и компилятор не догадается, как string сравнить с числом. Либо должен был быть оператор приведения типа operator char()... По-скольку ни того ни другого в классе string нет, то на нет и суда нет.. .

Если есть такие конструктор или оператор, то компилятор может попробовать один из типов преобразовать к другому.
Т. е. либо из char сделает временный string и отдаст его операции сравнения (также должна присутствовать в классе string)
Либо из string сделает временный char и применит операцию для сравнения двух char.
Юра Любушин
Юра Любушин
84 349
Лучший ответ
Добавлю, что наиболее частой ошибкой, которая приводит к недоумению начинающих программистов, это сравнение массивов типа char и const char, так как объявляются они очень схожим образом, представляют из себя разные типы.

char str[] = "Hello!";
char a[7];
for (int n = 0; n < 7; n++)
cout << a[n]; // Enter «Hello!»

теперь и там и там написано одинаково по смыслу, но переменные-то разные! !

там где char a[7], массив выглядит так.. .

char a[7] = {'H', 'e', 'l', 'l', 'o', '!'};
Афиг Мамедов
Афиг Мамедов
99 292
Eduard Salyanskiy Идея замечания понятна, но в цикле-то вводятся 7 символов, значит, Hello! ввести недостаточно, будет запрос еще на один символ, значит, для одинаковости надо вводить нулевой символ. ИМХО, яснее идея видна на программе

#include<iostream>
using namespace std;
main(){
char s1[]="Hello!";
char* s2 ="Hello!" ;
s1[2]='z';
// s2[2]='z';
cout
Eduard Salyanskiy Тьфу, забыл о придурковатом движке "Ответов"...

#include<iostream>
using namespace std;
main(){
char s1[]="Hello!";
char* s2 ="Hello!" ;
s1[2]='z';
// s2[2]='z';
cout