読者です 読者をやめる 読者になる 読者になる

C++1z basic_string::data()メンバ関数の非const版

C++

basic_stringクラスが保持している動的文字配列の生ポインタを取得するdata()メンバ関数ですが、C++14まではconstメンバ関数のみ用意されていました。

C++1zでは、非const版のdata()メンバ関数が追加されます。これにより、char*を要求するインタフェースに対してstd::stringオブジェクトを使いやすくなります。

たとえば、なぜかchar*を要求するWindowsCreateProcess()関数のコマンドライン引数には、

BOOL CreateProcess(
  LPCTSTR lpApplicationName,                 // 実行可能モジュールの名前
  LPTSTR lpCommandLine,                      // コマンドラインの文字列 ←これ
  LPSECURITY_ATTRIBUTES lpProcessAttributes, // セキュリティ記述子
  LPSECURITY_ATTRIBUTES lpThreadAttributes,  // セキュリティ記述子
  BOOL bInheritHandles,                      // ハンドルの継承オプション
  DWORD dwCreationFlags,                     // 作成のフラグ
  LPVOID lpEnvironment,                      // 新しい環境ブロック
  LPCTSTR lpCurrentDirectory,                // カレントディレクトリの名前
  LPSTARTUPINFO lpStartupInfo,               // スタートアップ情報
  LPPROCESS_INFORMATION lpProcessInformation // プロセス情報
);

C++1zでは以下のようにして引数を渡せます:

std::string applicationName;
std::string commandLineArgs;

// ...

if (CreateProcess(applicationName.data(), commandLineArgs.data(), /* etc. */)) {
  // etc.
}
else {
  // handle error
}

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。