Переменные каких типов можно сравнивать между собой, что бы компилятор не ругался .
Пытался сравнить char и string, неудачно видимо ...
Другие языки программирования и технологии
c++, переменные ...
Переменные РОДСТВЕННЫХ типов.
Либо, если есть перегруженные операторы сравнения для данной пары типов, причем, один из них обязательно должен быть пользовательским (класс, структура, объединение) , т. к. для встроенных типов операторы не перегружаются.
char short int long - суть ЦЕЛЫЕ, только разрядная сетка разная.
string - вообще класс, и если нет у него конструктора приведения типа string(const char& ), то и компилятор не догадается, как string сравнить с числом. Либо должен был быть оператор приведения типа operator char()... По-скольку ни того ни другого в классе string нет, то на нет и суда нет.. .
Если есть такие конструктор или оператор, то компилятор может попробовать один из типов преобразовать к другому.
Т. е. либо из char сделает временный string и отдаст его операции сравнения (также должна присутствовать в классе string)
Либо из string сделает временный char и применит операцию для сравнения двух char.
Либо, если есть перегруженные операторы сравнения для данной пары типов, причем, один из них обязательно должен быть пользовательским (класс, структура, объединение) , т. к. для встроенных типов операторы не перегружаются.
char short int long - суть ЦЕЛЫЕ, только разрядная сетка разная.
string - вообще класс, и если нет у него конструктора приведения типа string(const char& ), то и компилятор не догадается, как string сравнить с числом. Либо должен был быть оператор приведения типа operator char()... По-скольку ни того ни другого в классе string нет, то на нет и суда нет.. .
Если есть такие конструктор или оператор, то компилятор может попробовать один из типов преобразовать к другому.
Т. е. либо из char сделает временный string и отдаст его операции сравнения (также должна присутствовать в классе string)
Либо из string сделает временный char и применит операцию для сравнения двух char.
Добавлю, что наиболее частой ошибкой, которая приводит к недоумению начинающих программистов, это сравнение массивов типа 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', '!'};
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', '!'};
Похожие вопросы
- Как преобразовать строки файла в переменные (C#)?
- Как в C++ приравнять переменную и текст? А то такую запись нельзя. А без этого задачу не решить
- C#. Как сделать, чтобы программа проверяла тип введённой переменной?
- [C++] Почему не рекомендуют использовать глобальные переменные?
- [C/C++] Oбъявление переменной типа структуры в этой же структуре
- C++ Классы и Переменные
- C++ как переменную (signed int) разделить на старший и младший байт, а после записать в 2е другие переменные типа char?
- Раздел описания переменных в C++: правила задания имени переменной.
- Напишите пожалуйста функцию обмена значений двух переменных на си (не c++) для любого типа данных
- Почему в этой программе переменная объявлена дважды? (C++, WinAPI)
#include<iostream>
using namespace std;
main(){
char s1[]="Hello!";
char* s2 ="Hello!" ;
s1[2]='z';
// s2[2]='z';
cout
#include<iostream>
using namespace std;
main(){
char s1[]="Hello!";
char* s2 ="Hello!" ;
s1[2]='z';
// s2[2]='z';
cout