これがあるとき
UnicodeString s = "xxx"
これはできるのに
UnicodeString where = " abc" + s + " = :" + s;
これは出来ない
UnicodeString where = "and " + " abc" + s + " = :" + s;
理由:
char*とUnicodeStringをつなぐときには+演算子と自動変換が include\windows\rtl\ustring.h に定義してあるが、
UnicodeString operator +(const char*, const UnicodeString&); UnicodeString operator +(const wchar_t*, const UnicodeString&); UnicodeString operator +(const char16_t*, const UnicodeString&); UnicodeString operator +(const char32_t*, const UnicodeString&); UnicodeString(const char* src); UnicodeString(const UnicodeString& src); UnicodeString(const WideChar* src, int len); UnicodeString(const char* src, int len); UnicodeString(const WideChar* src); #if defined(WIDECHAR_IS_WCHAR) UnicodeString(const char16_t* src, int numChar16 = -1); #endif UnicodeString(const char32_t* src, int numChar32 = -1); #if defined(WIDECHAR_IS_CHAR16) UnicodeString(const wchar_t* src, int numWChar = -1); #endif
char*が連続すると、char*とchar*では演算子が無いためコンパイルできない。
しかし、これはできる
UnicodeString where = "and " " abc" + s + " = :" + s;
理由:
"and " " abc" はプリプロセッサによってコンパイルよりも前に連結されるので + をつけなければ良い。