ホームページ > バックエンド開発 > C++ > フォーマットされた std::string を最新の C のファイル ストリームに効率的に埋め込むにはどうすればよいですか?

フォーマットされた std::string を最新の C のファイル ストリームに効率的に埋め込むにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-18 21:02:15
オリジナル
917 人が閲覧しました

How Can I Efficiently Embed Formatted std::strings into File Streams in Modern C  ?

sprintf を使用してフォーマットされた std::string をファイル ストリームに埋め込む

モダン C は、sprintf でフォーマットされた std::string のファイルへの統合を合理化します。ストリーム。新しい手法では、従来のメソッドに比べて大幅な改善が行われています。

C 20

C 20 では std::format が導入され、Python のような置換フィールドを使用した簡単な文字列フォーマットが可能になります。

#include <iostream>
#include <format>

int main() {
    std::cout << std::format("Hello {}!\n", "world");
}
ログイン後にコピー

C 11

C 11 の std::snprintf は、安全でユーザーフレンドリーなオプションを提供します。

#include <memory>
#include <string>
#include <stdexcept>

template<typename ... Args>
std::string string_format(const std::string& format, Args ... args) {
    int size_s = std::snprintf(nullptr, 0, format.c_str(), args ...) + 1;
    if (size_s <= 0) { throw std::runtime_error("Error during formatting."); }
    size_t size = static_cast<size_t>(size_s);
    std::unique_ptr<char[]> buf(new char[size]);
    std::snprintf(buf.get(), size, format.c_str(), args ...);
    return std::string(buf.get(), buf.get() + size - 1);
}
ログイン後にコピー

注意事项

  • std::snprintf を使用して、ファイルに書き込む前に必要なバッファ サイズを決定します。 char[].
  • std::snprintf を使用した後にフォーマット エラーがないか確認します。
  • 割り当てられた文字配列のメモリを管理するには unique_ptr を使用します。

追加オプション

  • std::snprintf は、Microsoft コンパイラでは _snprintf に名前変更されます。
  • 拡張された機能とセキュリティ機能については、{fmt} の使用を検討してください。 library.

結論

最新の C 技術は、フォーマットされた std::string をファイル ストリームに組み込むための古いアプローチを大幅に改善しています。 C 20 の std::format を選択すると、最も効率的で安全なソリューションが提供されます。 C 11 の std::snprintf は下位互換性のための確実な代替手段を提供し、{fmt} のような外部ライブラリは機能をさらに強化できます。

以上がフォーマットされた std::string を最新の C のファイル ストリームに効率的に埋め込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート