В чём разница одинарных и двойных кавычек в С++?
Написал такой код:
#include <string>
std::string fakeBin(std::string str){
for (int i = 0; i < str.length(); i++){
str[i] = ((str[i] - '0') > 4) ? '1' : '0';
}
return str;
}
Со своей функцией он справляется, но при написании столкнулся с проблемой и мне стало интересно. Если в ? '1' : '0' заменить кавычки на двойные, то код перестаёт работать. С чем это связано, и чем различаются одинарные и двойные кавычки в C++?
Ответы (2 шт):
Спасибо @avp за исправление в комментариях!
"" и '' обозначают разные типы данных
Есть тип char, он хранит какое-то однобайтовое число
В си и си++ есть '',
указанный в нём символ,
повторяюсь символ,
не символы,
будут интерпретироваться как соответствующее число char
Интерпретируемым типом будет являтся const char
Например:
Латинская
aбудет интерпретирована как0x61(или97в десятиричной)
Есть тип const char *,
Это указатель на массив (принято называть строкой),
а если точнее,
то это указатель на первый символ (типа const char) этой строки
Когда мы пишем "", такую строку принято
называть строковым литералом
При взаимодействии со строкой (например: с помощью функций)
мы последовательно читаем символы,
пока не наткнёмся на спец символ \0 (нулевой символ)
Также, когда мы будем использовать "",
в конце автоматом появится \0
При использовании строкового литерала, он будет вшиваться в исполняемый файл
Например:
#include <iostream>
int main()
{
// ↓ Строковой литерал встраивается в исполняемый файл, и заканчивается на \0
std::cout << "Hello, World!" << std::endl;
return 0;
}
В чём проблема?
str[i] имеет тип char,
а когда Вы использовали "",
то он имел тип const char *
Преобразование с типа const char * в тип char невозможно,
поэтому и возникла ошибка
Символ 'A' забирает 1 байт, строка "A" 2 байта (это поле из 2 байтов, самого символа А и бинарного нуля \0 - признака конца строки):
В вашей команде str[i] = ... ожидается на правой стороне 1 символ, а не строка.
