問題タブ [user-defined-literals]
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++ - MPL シーケンスへのユーザー定義リテラル: これは合法ですか?
文字列の内容に基づいてコード生成を制御できるため、リテラル演算子に渡された文字列を MPL シーケンスに変換できると便利です。以前は、constexpr 関数の引数は関数本体内で定数式と見なされないため、これは不可能であると考えていました。ただし、Clang 3.4.2 および GCC 4.8.2 でコンパイルする次の回避策を思い付きました。
出力:
質問
このコードは未定義の動作を引き起こしますか、それとも合法ですか?
c++ - C++14 の標準定義リテラルがデフォルトでグローバル名前空間にないのはなぜですか?
std::string
C++14 には、ヘッダーからのさまざまなタイムスパンなどの標準定義のリテラルが含まれてい<chrono>
ます。
それらを使用するには、言う必要がありますusing namespace std::literals;
(または、さまざまなインライン名前空間にあるため、必要なリテラルに応じていくつかのバリエーションがあります)。
これはすべて良いことですが、なぜusing
宣言が必要なのかが気になります。"hello world"s
先頭にアンダースコアが付いていない UDL は実装用に予約されているため、標準準拠のプログラムで他の意味になる可能性はありません。
#include <string>
では、リテラル変換関数をスコープに入れるのに十分でないのはなぜでしょうか? リテラル名前空間を明示的に含める必要があるのはなぜですか?
編集: N3531は私が見つけた提案の最新バージョンです。
[ポートランド] の議論の要件を次のように要約できます。
- (関連するグループの) UDL 演算子にインライン名前空間を使用する
c++ - カスタム リテラルを定義するにはどうすればよいですか?
Windows で一部のソース コードを 1 つのスクリプト言語 (PAWN) からプログラミング言語 (C++) に変換しています。
ソースコードには、次の形式で何百万ものバイナリリテラルがあります。
残念ながら、Visual Studio 2013 はユーザー定義リテラル標準をサポートしていません。
どういうわけかこれを達成する方法はありますか?010101_b か C++ で何か、おそらくブーストを少し追加して?
c++ - 演算子 "" を std::literals::string_literals に配置する理由はありますか?
このコードがコンパイルされないことを発見して、かなり驚いています (C++14 コンパイラを使用していると仮定します)。
ideone が示すエラーは次のとおりです。
文字列リテラル演算子 'operator""s' が見つかりません
幸いなことに、using
ステートメントを使用して修正するのは非常に簡単です。
std::string
標準文字列のユーザー定義リテラルをそれ自体とは異なる名前空間に配置する背後にある理由があるかどうか疑問に思っています。私はそれについて考えてきましたが、理由がわかりません。
異なる型で動作するため、 operator""s
fromと衝突することはできません:std::chrono
その理由は、ユーザー定義のリテラルと衝突しないことである可能性があると考えていましたが、標準では、それらの前に'_'
アンダースコアを付ける必要があると述べています。
警告: 「_」が前に付いていないリテラル演算子サフィックスは、将来の標準化のために予約されています
だから、私はかなり驚いています.文字列リテラル演算子をstd::literals::string_literals
?
ありがとう。
c++ - typeid(複雑な(0.0,1.0)) != typeid(1.0i)
を使用しgcc 4.9
て、複素数の型リテラルで生成された型は、従来の手段で作成された場合と同じではないことがわかりました。
- 私はここで間違いを犯していますか?
- これはコンパイラのバグですか、それとも意図した標準的な動作ですか?
- 標準的な動作を意図している場合: 背後にある理論的根拠は何ですか?
不足している MCVE の追加
コンパイル手順:
出力:
興味深いことに、リテラルは適切な虚数ではないようです。(私は何かを見落としていると確信しています...)
c++ - アンダースコアのないユーザー定義リテラル
cppreferenceによると、を使用してリテラルを定義することが可能です
段落を読んだ後、定義することも可能であるべきだと思います
r
( の代わりに ud-suffix に注意してくださいs
)
過負荷s
はclang警告を出すだけです
でコンパイルしているので、これは本当に理解できません-std=c++14
。過負荷r
は
それは私にはさらに説明責任がないようです。
clang がこれらの警告/エラーを出力する理由と、r
ud-suffix を有効にする方法を教えてください。