問題タブ [guideline-support-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.

0 投票する
2 に答える
14992 参照

c++ - gsl::not_null対 std::reference_wrapper対 T&

C++ コア ガイドラインが最近発表されました (おめでとうございます!)。私はgsl::not_null型について心配しています。I.12で述べたように: null であってはならないポインターを次のように宣言します。not_null

nullptr エラーの逆参照を回避するため。nullptr の冗長なチェックを回避してパフォーマンスを向上させるため。

...

ソースに意図を記載することで、実装者とツールは、静的分析を通じていくつかのクラスのエラーを見つけるなど、より優れた診断を提供し、分岐や null テストを削除するなどの最適化を実行できます。

意図は明らかです。ただし、そのための言語機能は既に用意されています。null にできないポインターは、参照と呼ばれます。また、一度作成された参照は再バインドできませんが、この問題は によって解決されstd::reference_wrapperます。

gsl::not_nullとの主な違いはstd::reference_wrapper、後者はポインターの代わりにのみ使用できることですが、前者は割り当て可能なものすべてで機能しnullptrます (F.17 からの引用 : 「null」が有効な値ではないことを示すには、not_null を使用してください):

not_null組み込みポインターだけではありません。、、、、およびその他のポインターのような型で機能しarray_viewます。 string_viewunique_ptrshared_ptr

次のような機能比較表を想像します。

T&:

  • 保存できませんnullptrか?-はい
  • 再バインド可能? -いいえ
  • ポインター以外の代わりに使用できますか? -いいえ

std::reference_wrapper<T>:

  • 保存できませんnullptrか?-はい
  • 再バインド可能? -はい
  • ポインター以外の代わりに使用できますか? -いいえ

gsl::not_null<T*>:

  • 保存できませんnullptrか?-はい
  • 再バインド可能? -はい
  • ポインター以外の代わりに使用できますか? -はい

最後に、ここに質問があります:

  1. これらの概念の違いについての私の理解は正しいですか?
  2. std::reference_wrapperそれはもう駄目ということですか?

PS私はタグを作成cpp-core-guidelinesしましguideline-support-libraryた。これについては、適切に願っています。

0 投票する
3 に答える
29879 参照

c++ - gsl ライブラリの span と array_view の違いは何ですか?

最近のいくつかのカンファレンス プレゼンテーションで、Bjarne Stroustrup や他の人が、C++ とそれをサポートするいくつかのタイプの新しいコーディング ガイドラインについて言及しているのを耳にしました。

具体的には、関数へのパラメーターとしての代わりにの例span<T>(T* p, int n)を覚えています(話の 32:00 頃の時間)。を使用するという提案も覚えていますarray_view<T>。それらは2つの選択肢ですが、同じ概念ですか? それとも、私は物事を混乱させていて、実際にはそれほど関連していませんか?

私は、両者が何についてであるべきかについての権威ある定義を見つけることができないようです.

0 投票する
1 に答える
669 参照

c++ - gsl::not_null から移動する合法的な方法はありますか?

導入されたガイドライン サポート ライブラリnot_null<T>の目的は、ポインターのような型に不変条件を適用することです。ただし、動作しない既知の問題です。not_null<unique_ptr<T>>

私が見る限り、その理由はunique_ptr<T>コピー構築可能でnot_null<T>はなく、その T から移動するコンストラクターを持っていないということnot_null<T>です。それは不変であることを壊すため、どちらもデフォルト構築可能ではありません。を構築できたとしても、コピーできず、移動するとnullptrが残るためnot_null<unique_ptr<T>>、意味のある内部に到達することは不可能です。完璧な罠のようです。unique_ptrunique_ptrnot_null<T>

私はnot_null<T>、特定のコンテキスト、つまり範囲外になる直前にあるオブジェクトから合法的に移動できると主張しました。つまり、そこからの移動は、破棄前の最後のアクセスである必要があります。そうすれば、不変式が壊れているオブジェクトは、プログラムの残りの部分から観察できなくなります。not_null(自身のコードでのみ観察可能です。)

次の例では、 から移動できると仮定しnot_null<T>ます。

  1. not_null<unique_ptr<int>>f() から返された状態の状態は、そこから移動した後にリークできなかったという私の仮定は正しいですか (例として)?

  2. not_null<unique_ptr<int>>g() に渡された状態の状態は、そこから移動した後にリークできなかったという私の仮定は正しいですか (例として)?

  3. C++ 14/17 での移動の一般的なケースを禁止しながら、この特別な種類の移動を許可することは可能ですか?

0 投票する
1 に答える
146 参照

c++ - gsl::span が std::regex でコンパイルに失敗する

gsl::span混合バイナリ/ASCIIデータのパックされた構造(したがって novectorまたはstring)から正規表現で操作したい関数にデータを渡すために使用しようとしていますが、次のエラーが発生します:

エラー C2784: 'bool std::regex_match(_BidIt,_BidIt,std::match_results<_BidIt,_Alloc> &,const std::basic_regex<_Elem,_RxTraits> &,std::regex_constants::match_flag_type)': 推定できませんでした'std::cmatch' からの 'std::match_results>,_Alloc> &' のテンプレート引数

「std::regex_match」の宣言を参照してください

これが私がやろうとしていることです:

0 投票する
1 に答える
1358 参照

c++ - GCC 4.9.x で使用できる GSL 実装はありますか?

Microsoft の (コア) ガイドライン サポート ライブラリの実装は、GCC 5.1 をサポートすると言われていますが、他のバージョンのサポートは指定していません。より高いバージョンは問題ないようです (とにかく、私の Debian Stretch では 5.3.1) - しかし、GCC 4.9.3 でのテストのビルドは失敗します。

  • 他の誰かが GSL を実装しましたか?
  • どうにかして MS GSL を使用できますか?
  • そうでない場合、安全なサブセットを使用できますか? (おそらくそうではありません、私は知っています)
  • そうでない場合、新しいコンパイラを使用している人だけがガイドラインをサポートするライブラリを使用できるのは問題ではありませんか? 古いコンパイラは C++11 または C++14 をサポートしているのに?
0 投票する
1 に答える
1511 参照

c++ - range-v3 で gsl::span を使用する

GSL と range-v3 ライブラリに慣れるために、ちょっとした例を試してみましたが、どうすればそれらを連携させることができるのだろうと思いました。私はこのおもちゃの例を持っています

動作します。しかし、範囲として使用しようとするgsl::span<int>と、エラー メッセージが表示されます。コンパイラはspan、ビューの概念を満たしていないことを教えてくれます。

コンパイラ メッセージ:

しかし、私の理解では、 aspan 特定のビューであり、 (同じ型の)begin()およびend()イテレータさえあるため、そうすべきです。

  • それらが構成可能で一緒に動作するのはクールではないでしょうか? それとも、両方に互換性がない理由がありますか?
  • これは、range-v3 での強力な「概念」の使用に起因する問題だと思います。他の種類の概念機能が言語でサポートされている場合、自動的に解決されますか?
  • span両方のライブラリを(非産業用の)ソフトウェアで一緒に使用したい場合は、現在、何らかの適応が必要であると思います。これらを連携させるには、何を変更すればよいですか? (それがまったく良い考えであれば)
  • それはまた、最終的に「作業するために満たすべきクラスは何range-v3ですか?」という質問に私を導きます。ファサード、アダプターなどからの継承は、現在、これらの概念的な要件についてコンパイラーに伝える唯一の方法ですか?
0 投票する
1 に答える
1011 参照

c++ - 致命的なエラー C1001: コンパイラで内部エラーが発生しました

VS2013 に意図的に gsl.h を組み込んでみました。プロジェクトをビルドしようとすると、

c:\users\njain6\documents\visual studio 2013\projects\gcldemo\string_span.h(336): 致命的なエラー C1001: コンパイラで内部エラーが発生しました。

私が従った手順:

  1. Github から zip ファイルをダウンロードしました。
  2. プロジェクトフォルダー内のフォルダーにzipを解凍しました。
  3. プロジェクトに gsl ヘッダーを含めました。

ここで何か不足していますか?

0 投票する
1 に答える
4593 参照

c++ - Ensures() - ガイドライン支援ライブラリ

コードでの使用方法を理解しようとしてEnsures()います。にあるように、次のように使用してみるとEnsures()...

result変数が と等しくない場合、255プログラムは次の出力でクラッシュします"terminate called without an active exception"。私の質問は、Ensures()適切に使用する方法ですか?