文字和常量之间的C++连接

D_D*_*D_D 2 c++ string-concatenation literals

我是C++的新手,我想知道为什么下面的行不正确.(SERVER_NAME已被定义为常量)

L"Initial Catalog=DatabaseName;Data Source=" << SERVER_NAME << ";"
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

error C2296: '<<' : illegal, left operand has type 'const wchar_t [...' 
error C2308: concatenating mismatched strings
Run Code Online (Sandbox Code Playgroud)

谢谢

Sve*_*ven 6

operator <<不是连接运算符,它是流类型的特殊重载运算符,允许您将数据发送到流.它只适用于使用流的情况.

你有两个选择.首先,您可以使用std :: wstring:

std::wstring(L"Initial Catalog=DatabaseName;Data Source=") + SERVER_NAME + L";";
Run Code Online (Sandbox Code Playgroud)

或者你可以使用wstringstream(来自<sstream>标题):

std::wstringstream stream;
stream << L"Initial Catalog=DatabaseName;Data Source=" << SERVER_NAME << L";"
Run Code Online (Sandbox Code Playgroud)

使用stream.str()得到在这种情况下产生的字符串.流方法的优点是即使并非所有要连接的东西都已经是字符串,也可以使用它.

如果您要打印到现有流(如wcout),您可以跳过字符串流并直接使用它.

正如其他答案所指出的那样,L"Initial Catalog=DatabaseName;Data Source=" SERVER_NAME L";"如果SERVER_NAME是使用#define创建的常量,则可以使用.如果它是一个const wchar_t*不起作用.