Необработанные строковые литералы и кодификация файлов
C ++ 11 представилнеобработанные строковые литералы что может быть очень полезно для представления строк в кавычках, литералов с множеством специальных символов, таких как пути к файлам Windows, выражения регулярных выражений и т. д.
std::string path = R"(C:\teamwork\new_project\project1)"; // no tab nor newline!
std::string quoted = R"("quoted string")";
std::string expression = R"([\w]+[ ]+)";
Эти необработанные строковые литералы также можно комбинировать с префиксами кодирования (,,u8
u
U
, или жеL
), но, если префикс кодирования не указан, имеет ли значение кодировка файла?, давайте предположим, что у меня есть этот код:
auto message = R"(Pick up a card)"; // raw string 1
auto cards = R"()"; // raw string 2
Если я смогу написать и сохранить приведенный выше код, очевидно, что мой исходный код закодирован как Unicode, поэтому ямне интересно:
raw string 1
будет ли Unicode буквальным? (хотя он использует только символы ASCII), другими словами, необработанная строка наследует кодификацию файла, в котором написано, или компилятор автоматически определяет, что unicode isn 'Нужно ли независимо от кодировки файла?Нужен был бы префикс кодировкиU
наraw string 2
для того, чтобы рассматривать его как литерал Юникода, или он будет автоматически в Юникоде из-за его содержимого и / или кодировки исходного файла?Спасибо за внимание.
РЕДАКТИРОВАТЬ:
Тестирование приведенного выше кода на ideone.com и распечаткаmessage
а такжеcards
переменные, это выводит:char const*
template std::string demangle(T t)
{
int status;
char *const name = abi::__cxa_demangle(typeid(T).name(), 0, 0, &status);
std::string result(name);
free(name);
return result;
}
int main()
{
auto message = R"(Pick up a card)";
auto cards = R"()";
std::cout
< "message type: " < demangle(message) < '\n'
< "cards type: " < demangle(cards) < '\n';
return 0;
}