Строковые литералы в C ++ с макросом _T - PullRequest
1 голос
/ 14 февраля 2012

Какая разница (если есть) между этим

_T("a string")

и

_T('a string')

Ответы [ 5 ]

4 голосов
/ 14 февраля 2012

Во-первых, _T не является стандартной частью C ++.Я добавил тэг "windows" к вашему вопросу.

Теперь разница между ними в том, что первое правильно, а второе - нет.В C ++ ' предназначен для цитирования одиночных символов , а " для цитирования строк.

3 голосов
/ 14 февраля 2012

'a string' - это так называемый «многозначный литерал».Он имеет тип int и значение, определяемое реализацией.Это [lex.ccon] в стандарте.

Я не знаю, какие значения MSVC присваивает литералам с несколькими символами, и я точно не знаю, что макрос MS _T делает с ним., но я ожидаю, что вы получите узкий литерал с несколькими символами на узких сборках и широкий литерал с несколькими символами на широких сборках.Префикс L одинаков для строковых и символьных литералов.

В любом случае, это неправильно: литералы с несколькими символами практически бесполезны и, конечно, не могут заменить строки."a string" - это строковый литерал, который вам нужен.

3 голосов
/ 14 февраля 2012

Второе неверно. Вы помещаете строковый литерал между одинарными кавычками.

2 голосов
/ 14 февраля 2012

Вы используете '' для одного символа и "" для строк. _T('a string') неверно и его поведение зависит от компилятора.

В случае MSVC он использует только первый символ. Пример:

#include <iostream>
#include <tchar.h>

int main()
{
    if (_T('a string') == _T('a'))
        std::cout << (int)'a' << " = " << _T('a');
}

вывод: 97 = 97

1 голос
/ 14 февраля 2012

Одинарные кавычки в основном используются при обозначении одного символа:

char c = 'e' ;

Двойные кавычки используются со строками и операторами вывода:

string s = "This is a string";
cout << "Output where double quotations are used.";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...