問題タブ [default-arguments]
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++ - デフォルトの引数で参照を転送しますか?
Forwarding Reference (以前はScott Meyers によってUniversal Referencesと呼ばれていました) のデフォルト引数を指定する方法を理解するのに苦労しています。
私がやりたいことをしようとしているコードの例を次に示します。
エラーを調べてみると、テンプレート引数をデフォルトに設定し、その後引数をデフォルト構築することで機能させることができることがわかりました。
これはこれを処理する「適切な」方法ですか?私が使用する構文は何ですか?「デフォルトの転送参照」の望ましい効果を得る方法は複数ありますか? これはどのように書けばよいのでしょうか?また、後でコードに大量の SFINAE を振りかけることになるので、複数のオーバーロードの記述を含まないものをはるかに好むことを覚えておいてください。
c++ - C++ のデフォルトの関数パラメータが機能しない
デフォルトのパラメータが必要な関数があります:
これは機能です:
エラー:
私は何が間違っていたのか理解できません。
python - デフォルトの出力ファイルを入力ファイルに依存させる
あるファイル タイプを別のファイル タイプに変換する Python スクリプトを作成しようとしています。出力ファイルを指定するオプションが必要ですが、デフォルトでは、デフォルトのファイル名の拡張子を変更するだけです。
convert('foo.gb')
例: を出力したいfoo.faa
がconvert('foo.gb', 'bar.faa')
、出力するbar.faa
私がこれを実装した方法は次のとおりです。
そのため、出力が指定されているかどうかを確認し、指定されていない場合は、正規表現を使用して入力ファイル名を正しい拡張子に変更します。このコードは機能しますが、やや雑であるか、少なくともあまり読みにくいように見えます。.
ファイル名が拡張子の前以外の場所にある場合も壊れます。
これを行うより良い方法はありますか?
python - Pythonで引数がNoneとして指定されている場合、引数にデフォルト値を使用するように関数を取得する良い方法は何ですか?
デフォルト値がlikefunction
のブール値引数を取る関数 ( と呼ばれる) があるとします。True
def function(argument1 = True)
resolveArg
ここで、この関数を使用して、既存のインフラストラクチャで引数をチェックする別の関数 ( ) の出力を使用して引数を指定するとします。このresolveArg
メソッドは一般的に使用され、指定された関数 (例: ) の引数値が見つかった場合function
は関数の引数をそれに設定し、それ以外の場合は引数を に設定しますNone
。
引数がこの他の関数 ( ) によってfunction
設定されている場合、引数のデフォルト値を使用するにはどうすればよいですか?None
resolveArg
c++ - GCC のデフォルト引数 segfaults のための空のブレース初期化子を持つ std::map 引数
問題
私が開発したライブラリで segfault を報告しているユーザーからバグ レポートを受け取りました。
問題のあるコードの最小限の例は次のとおりです。
GCC でコンパイルすると (4.8.2 と 4.7.3 をテストしました) 0
、コンテナーのサイズとして正しく出力されますが、ループ内でセグメンテーション違反が発生します (これはまったく実行されるべきではありません)。
回避策
ただし、宣言を次のように変更することで問題を解決できます。
作品のコピーmap
も:
パラメータを に変更してconst std::map<...>&
も機能します。
GCC 4.9.1 は正常に動作します。
また、Clang はコードを正常にコンパイルして実行します。(失敗した gcc 4.8.2 と同じ libstdc++ を使用している場合でも)
作業例: http://coliru.stacked-crooked.com/a/eb64a7053f542efd
質問
関数内でマップが有効な状態にないことは明らかです (詳細は後述)。GCC (または libstdc++) のバグのように見えますが、ここで愚かな間違いを犯していないことを確認したいと思います。このようなバグが少なくとも 2 つのメジャー バージョンで gcc に残るとは信じがたいです。
だから私の質問は次のとおりです:デフォルトstd::map
パラメータを初期化する方法が間違っていますか(そして私のコードのバグ)、それともstdlibc++
(またはgcc
)のバグですか?
私は回避策を探していません (コードを機能させるために何をすべきかを知っているため) アプリケーションに統合すると、問題のあるコードが一部のコンピューターで正常に実行されます (gcc 4.8.2 でコンパイルされた場合でも)。
詳細
私はそれを使用してコンパイルします:
gdb からのバックトレース:
/tmp/c.cpp:9 は次の行ですstd::cout << ...
ASAN は次のように報告しています。
これはnullptr - 8
valgrind ショー:
マップの内部状態を見ると、コードが実際に失敗する必要があることがわかります。
std::map::begin()
libstdc++ では、次の値を返します
その内部表現から、次をstd::map::end()
返します。
gdb ショー:
begin()
そのため、との値は、 empty の標準で義務付けられてend()
いるものと同じではありません ( begin()
nullptr です) std::map
。