带有_T宏的C ++中的字符串文字

时间:2012-02-14 13:50:23

标签: c++ windows string

这个

之间有什么区别(如果有的话)
_T("a string")

_T('a string')

5 个答案:

答案 0 :(得分:4)

首先,_T不是C ++的标准部分。我在你的问题中添加了“windows”标签。

现在,它们之间的区别在于第一个是正确的而第二个不是。在C ++中,'用于引用单个字符"用于引用字符串。

答案 1 :(得分:3)

第二个是错的。您将字符串文字放在单引号之间。

答案 2 :(得分:3)

'a string'是一个所谓的“多字符文字”。它具有类型int和实现定义的值。这是标准中的[lex.ccon]

我不知道MSVC对多字符文字的值是什么,我不确定MS特定的_T宏最终会用它做什么,但我希望你得到一个狭窄的多字符文字在窄版本上,以及广泛构建的广泛多字符文字。字符串和字符文字的前缀L是相同的。

这是错的,无论如何:多字符文字几乎没用,当然也不能替代字符串。 "a string"是一个字符串文字,这就是你想要的。

答案 3 :(得分:2)

您将''用于单个字符,将""用于字符串。 _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

答案 4 :(得分:1)

单引号主要用于表示单个字符:

char c = 'e' ;

双引号与字符串和输出语句一起使用:

string s = "This is a string";
cout << "Output where double quotations are used.";