Это то, что всегда заинтриговало меня языком C++. С появлением идентификатора «const» он должен был заменить использование оператора #define для объявления констант. Но, как я уже сказал, чтобы использовать их, я оказался в const char для безумия конверсии ошибок.Почему «const int» используется для преобразования «int», но «const char []» в «char *» не
В последнее время я заявлял, что делаю это в константах класса, как в Java. Поэтому я решил объявить что-то вроде этого.
private: const static int NB_FIELD = 22;
Это прекрасно работает. Функция, возвращающая int, может возвращать «const int» без каких-либо проблем.
Но теперь, если я пытаюсь сделать то же самое со строкой, как это:
private: static const char ERRORSTR [ 6 ];
Какого constains строка «Error», он будет генерировать константный символ СИМВОЛА проблемы преобразования, как в этой функции.
char* EnhancedSQLobject::get_SQLname (int index)
{
if (index < p_nb_field && index >= 0)
return (p_SQLfield_ptr [ index ] . SQLname)
return (ERRORSTR);
}
Теперь некоторые люди говорят, изменить возвращаемое значение для сопзЬ символ *, но я не могу, потому что если индекс действителен, он вернет неконстантную переменный, но если индекс является недействительным, то это будет верните строку с постоянной ошибкой.
Таким образом, мой выбор состоит в том, чтобы сделать строку ошибки непостоянной или создать константу с помощью операторов #define. Я давно помню попытку определить все как const char, но в конце концов он взорвался где-то еще в цепочках конверсии. Просто упростить использование регулярного символа (класс String для меня не вариант)
Это просто смешно, зачем использовать функцию, которая работает только для части переменных. Я предполагаю, что это связано с тем, что укусы на самом деле являются таблицей символов, поэтому он, вероятно, возвращает указатель вместо значения.
«Это просто смешно, зачем применять функцию, которая работает только для части переменных типов». - На самом деле, это не то, что происходит. В одном случае вы говорите о том, что 'const int' соответствует' int', но в другом случае вы говорите о 'const char *' в 'char *', в котором добавлен уровень косвенности. –
Вы сравниваете тип non-pointer-type с типом указателя.'T' нельзя сравнивать с' T2 * ', предполагая, что' T' и 'T2' являются базовыми типами. – Ajay
В одном случае копируется 'int'. В другом, указатель скопирован, и поскольку он указывает на постоянные данные, почему будет работать преобразование? – chris