C++1z basic_string::data()メンバ関数の非const版
basic_string
クラスが保持している動的文字配列の生ポインタを取得するdata()
メンバ関数ですが、C++14まではconst
メンバ関数のみ用意されていました。
C++1zでは、非const
版のdata()
メンバ関数が追加されます。これにより、char*
を要求するインタフェースに対してstd::string
オブジェクトを使いやすくなります。
たとえば、なぜかchar*
を要求するWindowsのCreateProcess()
関数のコマンドライン引数には、
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 }
参照
- P0272R0 Give
std::string
a non-const.data()
member function - P0272R1 Give
std::string
a non-const.data()
member function. - 文字列取得バッファとしての
std::string
リターンズ - yohhoyの日記
お断り
この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。