問題タブ [c++-standard-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++標準で厳密に要求されるものよりも多くのパブリックメンバー関数
C ++実装にパブリックstd::istream_iterator::_M_equal
メンバー関数があります(他の標準グローバル関数によってistreamイテレーターを比較するために使用されます)。この標準では、ユーザーがそのメンバー関数を使用できるようにする必要はありません。
標準で要求されている機能以外のより多くのパブリックメンバー機能を提供する実装が、依然として「標準」と見なすことができるかどうかを知りたいです。
c++ - 標準ライブラリの関数名がWindowsとLinuxで異なるのはなぜですか?
WindowsライブラリをAndroidに移植しています(GNU標準C ++ライブラリオプション、libstdc ++-v3を使用)。VCライブラリとGNUライブラリの間には、名前の違いが多数あるようです。例:
_stricmp
strcasecmp
代わりに呼び出されます_unlink
と呼ばれるunlink
_scalb
と呼ばれるscalbn
_finite
と呼ばれるisfinite
_isnan
と呼ばれるisnan
_itoa
GNUC++には存在しitoa
ないようですatoi
存在しますが、存在しませんatoi64
VCライブラリとGNUライブラリの両方のドキュメントは、それらが「ISO」C ++を実装していることを示しています。たとえば、次のような「ISO C ++」名を使用していない場合、VC2008からいくつかの警告を受け取ることができます。このアイテムのPOSIX名は廃止されました。代わりに、ISO C++準拠の名前_itoaを使用してください。」同様に、GNUのマニュアルには、「GNU標準C++ライブラリv3はISO14882標準C++ライブラリを実装するための進行中のプロジェクトです」と書かれています。
では、ライブラリはどのようにしてこれらの異なる名前になってしまうのでしょうか。どの名前がより「標準的」であるかをどのように判断できますか?
また、libstdc ++-v3のインデックスはどこかにありますか?つまり、ライブラリ内のすべての関数の単純なリストですか?機能のリストを提供していないように見えるマニュアルと「ソースドキュメント」しか見つかりません。
regex - マイクロソフトのUnicode サポートのレベル?
Microsoft Visual C++ 2010のstd::wregex
Unicodeサポートはどのようなものですか?
- Unicode 文字クラスをサポートしていますか?
[:Nd:]
など。 - digraphs などの照合のサポート?
[.ae.]
など。
Microsoft の実装は、Unicode に関してブーストstd::wregex
よりも優れていることを望んでいますか?
ICU図書館を利用できます。しかし、ICU には 16MB のデータ ファイルが必要です。Windowsへの依存をなくしたいと思っています。
注:regex
非ワイド バージョンでは、ASCII 文字のみがサポートされます! wregex
したがって、 UTF-16 を適切に実装するワイド バージョンにはあまり期待できません。
c++ - Clang 3.1 +libc++コンパイルエラー
~/alt
LLVM-Clangトランク(2012年4月23日)をUbuntu 12.04でGCC-4.6を使用して正常にビルドおよびインストールし、次にこのClang-buildを使用してlibc++をインストールしました。使いたいときは、次の両方-lc++
を用意する必要があります。-libstdc++
f.cpp
を含むコンパイル
省略する-lstdc++
と、リンクエラーが発生します
libc++
の完全な代替品ではありませlibstdc++
んか?
c++ - C++ ファイル処理: ios::app と ios::ate の違いは?
ファイルに書き込むときios::ate
との違いは何ですか。
私の見解では、ファイル内を移動する機能を提供しますが、ファイルの最後でのみ読み取り/書き込みができます。これは正しいです?ios:app
ios::app
ios::ate
c++ - MacPorts Clang 3.1に標準ライブラリのインストールがありませんか?
MacPortsによってインストールされたclangを使用して、C++11でリスト機能を初期化しようとしています。この単純なコードをコンパイルする場合:
このエラーが発生しました:
システムgcc(4.2)のヘッダーが含まれているようです。そして、clang固有のヘッダーが見つかりません。これを機能させるには、MacPortsからどのパッケージをインストールする必要がありますか?または、clangのlibc ++をインストールしてビルドする必要がありますか?
c++ - nullptrをstd::stringに割り当てても安全ですか?
私は小さなプロジェクトに取り組んでいて、次のような状況になりました。
私の質問は、GetValue()
returnsNULLmyString
が空の文字列になるかどうかです。未定義ですか?またはそれはセグメンテーション違反になりますか?
c++ - stdout から読み取る奇妙なパフォーマンスの問題
他の実行可能ファイルをテストするために使用されるいくつかのコードに取り組んでいます。便宜上、コードをテスター、テスト対象のコードをクライアントと呼びます。テスターはクライアントを生成し、コマンドをクライアントの stdin に送信し、クライアントの stdout から結果を受け取ります。
最初にいくつかのパフォーマンス テストを行いたかったので、非常に単純なサンプル テスターとクライアントを作成しました。テスターは、クライアントが標準出力に「READY」を書き込むのを待ち、応答としてクライアントの標準入力に「GO」を送信します。次にクライアントは、コマンド ライン フラグで設定されたバイト数を stdout に書き込み、"\nREADY\n" を書き込みます。この時点で、テスターは再び "GO" を書き込みます。これを 10,000 回繰り返した後、テストを完了するのにかかった時間と「スループット」を計算します。10,000 を完了までの時間で割ったものです。
クライアントが「READY」を送信する前に、0、10、100、1000、10000、および 100000 バイトのデータを送信する上記のテストを実行しました。各バイト サイズについて、テストを 10 回繰り返し、平均をとった。ラップトップで Ubuntu VMWare インスタンスを実行すると、1 秒あたり約 10 万 GO/READY ペアのスループットが得られました。パフォーマンスはかなり安定しており、クライアントがテスターに送信するバイナリ バイト数にはほとんど依存しませんでした。次に、CentOS を実行する非常に高速な 24 コア サーバーでテストを繰り返しました。ペイロードが 0 バイトの場合、1 秒あたり約 55,000 の GO/READY ペアしか観察できず、クライアントが送信したバイト数が増加するにつれて、パフォーマンスが著しく低下しました。クライアントが "GO" と "READY" の間に 100k バイトを送信した場合、スループットは 1 秒あたり約 6k 操作にすぎませんでした。
そこで3つ質問があります
- より高速なマシンでは、同じコードの実行速度が大幅に低下するのはなぜですか
- 仮想マシンのパフォーマンスはペイロード サイズに依存しないのに、高速サーバーのパフォーマンスはペイロード サイズに大きく依存するのはなぜですか?
- サーバー上で物事を高速化するためにできることはありますか
考えられる理由の 1 つは、高速サーバーでコードを再コンパイルし、別のバージョンの C++ ライブラリを使用しているということです。VMWare マシンは Ubuntu 11.10 を実行しており、高速サーバーは CentOS 6 を実行しています。どちらも 64 ビット マシンです。
関連するテスター コードは次のとおりです。
また、(unistd.h からの) read() 呼び出しを使用して 1MB バッファーを呼び出し、memchr を呼び出して "\n" 文字を見つけて READY を探すバージョンも試しましたが、同じパフォーマンス結果が得られました。
関連するクライアント コードは次のとおりです。
どんな助けでも大歓迎です!
c++ - What is wrong with my SFINAE to check for std::map/std::vector?
I have a simple SFINAE scenario to distinuish standard containers like std::map
:
With
When I instantiate this with HasKeyType<std::vector<int> >::value
, I get
I'm completely stumped at this. Why is HasKeyType
incomplete, and why doesn't SFINAE work?
I get similar errors to (B)
and (C)
as well if I instantiate HasKeyType<std::map<int,float> >
which in fact has a key type (int
).
g++ version: 4.5.2 (yes, I know it's old)