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

String literals in C++ with _T macro

本文关键字:字符串 文字 C++ 宏的 带有      更新时间:2023-10-16

这个之间有什么区别(如果有的话)

_T("a string")

_T('a string')

首先,_T不是C++的标准部分。我在你的问题上加了"windows"标签。

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

第二个错误。您正在将字符串文字置于单引号之间。

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

我不知道MSVC给多字符文字赋予了什么值,也不确定特定于MS的_T宏最终会对它做什么,但我希望在窄构建中得到窄的多字符文字,在宽构建中得到宽的多字符文本。前缀L对于字符串和字符文字是相同的。

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

单个字符使用'',字符串使用""_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

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

char c = 'e' ;

双引号用于字符串和输出语句:

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