問題タブ [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++ - std::forward_list メンバーを静的として実装できますか?
std::forward_list
オブジェクトに実際にアクセスする必要がない可能性のある提供insert_after
およびメンバー。したがって、それらはメンバー関数として実装され、リスト オブジェクトなしで呼び出すことができます。これは、非常に一般的な用途である、リストから自分自身を削除したいオブジェクトに役立ちます。EDIT : この最適化は、特殊化またはユーザー定義のステートレス アロケーターにのみ適用されます。erase_after
std::forward_list
static
forward_list
std::allocator
標準準拠の実装でこれを行うことができますか?
§17.6.5.5/3 は言う
C++ 標準ライブラリで記述されているメンバー関数シグネチャの呼び出しは、実装が追加のメンバー関数シグネチャを宣言していないかのように動作します。
脚注付き
有効な C++ プログラムは、期待されるライブラリ メンバー関数、または同等の動作をする関数を常に呼び出します。実装では、有効な C++ プログラムによって呼び出されない追加のメンバー関数を定義することもできます。
追加static
すると「異なる」メンバー関数が作成されるかどうかは明確ではありませんが、(暗黙の) 引数を削除しても、デフォルトの引数を追加しても壊れないものは壊れません。これは合法です。(標準メンバー関数に PTMF を合法的に使用することはできません。)
図書館がこれを行うことを許可されるべきだと思いますが、何らかの規則が破られるかどうかはわかりません。また、列挙されたメンバー関数のプロトタイプはどの程度規範的ですか?
visual-studio-2010 - エラーLNK2019:未解決の外部シンボル "toString(int)"
環境:WindowsXP。VisualStudios2010。言語-C++。
私は次のリンクエラーに遭遇し、この問題を修正する方法のアイデアを使い果たしました。私のグループが管理する2つのプロジェクト(Messages&Carbon)にリンクするプロジェクト(CnD Device)があります。3つのプロジェクト間でプロジェクトのプロパティを検索しようとしました
この問題は、標準C++ライブラリにある文字列にリンクしていないことが原因だと思います。プロパティリストを何度もスキャンしました。以下は、この問題にとって重要であると私が信じるいくつかの特性です。
CnDデバイスのプロパティ情報:
- 構成タイプダイナミックライブラリ.dll
- MFCの使用共有DLLでMFCを使用する
- ALTを使用しないALTを使用する
- 文字セットマルチバイト文字セットを使用
- ランタイムライブラリマルチスレッドDLL(/ MD)
- 追加の依存関係msvcprtd.lib、Carbon.lib、BUFFER_API.lib、BUFFER_FRAMEWORK.lib、Messages.lib
- すべてのデフォルトライブラリを無視しますいいえ
メッセージプロパティ情報:
- 構成タイプ静的ライブラリ(.lib)
- MFCの使用共有DLLでMFCを使用する
- ALTを使用しないALTを使用する
- 文字セットUnicode文字セットを使用
- ランタイムライブラリマルチスレッドDLL(/ MD)
- 追加の依存関係
- リンクライブラリの依存関係
炭素特性情報:
- 構成タイプ静的ライブラリ(.lib)
- MFCの使用共有DLLでMFCを使用する
- ALTを使用しないALTを使用する
- 文字セットUnicode文字セットを使用
- ランタイムライブラリマルチスレッドDLL(/ MD)
- リンクライブラリの依存関係
私のCnDリンク出力は次のとおりです。
c++ - std::vectorなどを含む前方宣言
私は前方宣言をよく使用しました。それらは多く#include
のを回避し、コンパイル時間を改善するのに役立ちます。しかし、標準ライブラリでクラスを前方宣言したい場合はどうなりますか?
前方宣言は禁止/不可能だと聞きましたstd::vector
。さて、無関係な質問に対するこの答えは、私のコードを次のように書き直すことを示唆しています。
stuff.h
stuff.cpp
VectorOfNumbers
これで、プロジェクト全体ですべてのコンテキストの代わりに使用するとstd::vector<int>
、すべてがうまくいくようになり#include <vector>
、ヘッダーファイルに含める必要がなくなります。
この手法には大きな欠点がありますか?前方宣言ができることの利益は、vector
それらを上回ることができますか?
c++ - std::lexical_cast - そんなことありますか?
C++ 標準ライブラリはこの関数を定義していますか、それとも Boost に頼る必要がありますか?
ウェブで検索してもBoost以外は見つからなかったのですが、ここで質問したほうがいいと思いました。
c++ - C++標準ライブラリのパラメータタイプ
一部の標準ライブラリ関数がパラメータとしてvoid*を使用していることに気付きました。たとえば、memcpy
関数のプロトタイプは次のとおりです。
パラメータとしてchar*を使用する関数もあります。たとえば、クラスのread
関数ですifstream
。そのプロトタイプは次のとおりです。
標準ライブラリがこれらのパラメータを統合しないのはなぜですか。たとえば、すべてchar *を使用するか、すべてvoid*を使用します。特別な理由はありますか?
チェン
c++ - C++ がこれをあいまいな関数参照と見なすのはなぜですか
コンパイラが次の GetLength 関数ポインタをあいまいな
疑似コードと見なすのはなぜですか。
GetInfo は、二重リターン + ITEM* 引数パターンの一部のみを許可します。では、なぜ GetLength の 2 つの文字列ベースのバリエーションを考慮する (そして破棄しない) のでしょうか?
c++ - Why does the VS2008 std::string.erase() move its buffer?
I want to read a file line by line and capture one particular line of input. For maximum performance I could do this in a low level way by reading the entire file in and just iterating over its contents using pointers, but this code is not performance critical so therefore I wish to use a more readable and typesafe std library style implementation.
So what I have is this:
While this isn't performance critical code I've called line.reserve(1024) before the parsing operation to preclude multiple reallocations of the string as larger lines are read in.
Inside std::getline the string is erased before having the characters from each line added to it. I stepped through this code to satisfy myself that the memory wasn't being reallocated each iteration, what I found fried my brain.
Deep inside string::erase rather than just resetting its size variable to zero what it's actually doing is calling memmove_s with pointer values that would overwrite the used part of the buffer with the unused part of the buffer immediately following it, except that memmove_s is being called with a count argument of zero, i.e. requesting a move of zero bytes.
Questions:
Why would I want the overhead of a library function call in the middle of my lovely loop, especially one that is being called to do nothing at all?
I haven't picked it apart myself yet but under what circumstances would this call not actually do nothing but would in fact start moving chunks of buffer around?
And why is it doing this at all?
Bonus question: What the C++ standard library tag?
c++ - オブジェクトを ostream に挿入する
次のように、クラス インスタンスのテキスト記述を ostream に配置したい
ostream インサーターを宣言する方法を知っています。
さまざまなレベルの詳細を ostream に追加できるようにしたいと考えています。2 つ以上の ostream インサーターを定義するか、インサーターに追加の引数を渡すか、インサーターにメソッドを渡すか、または文字列ストリームを返すメソッドを呼び出すことができれば、これを行うことができます (できますか?)
誰かがこの問題を解決しましたか?
c++ - 文字列内の特定の部分を検索して印刷するにはどうすればよいですか?
私は主にC++ライブラリから標準関数を探しています。これは、文字列内で文字を検索し、見つかった文字から始まる文字列の残りの部分を出力するのに役立ちます。次のシナリオがあります。
よろしくお願いします。コードの完成を手伝っていただければ幸いです。
c++ - 実行時にベクトルサイズを決定するにはどうすればよいですか?
実行時に、のサイズを決定できvector
ますか?
例えば
input : 25 // ベクトルのサイズを示す