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)
谢谢
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*不起作用.