コンピュータや音楽の事書いてます

C++Builder UnicodeStringとchar*文字列の連結

これがあるとき

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" はプリプロセッサによってコンパイルよりも前に連結されるので + をつけなければ良い。