6

ここ:

http://en.cppreference.com/w/cpp/utility/functional/function

operator bool説明:「格納された呼び出し可能オブジェクトが有効かどうかをチェックします」。

おそらくデフォルトで構築されstd::functionたものは有効ではありませんが、これが唯一のケースですか?

また、それが有効かどうかをどのようにチェックしますか?

オブジェクトが無効な場合を正確に発生さoperator()せる場合はありますか?std::bad_function_call

4

2 に答える 2

7

そのままではうまく書かれていないので、混乱は正当化されます。「有効」とは、「ターゲットを持っている」ことを意味します。

機能が割り当てられているstd::function場合、「ターゲットがあります」:

std::function<void()> x; // no target
std::function<void()> y = some_void_function; // has target

x = some_other_void_function; // has target
y = nullptr; // no target

x = y; // no target

彼らはそれを使用する前に「有効」を定義するか、単に公式の言葉遣いに固執する必要がありました。

于 2012-08-09T16:39:40.093 に答える
1

言語標準は言う

explicit operator bool() const noexcept;

戻り値:*これにターゲットがある場合はtrue、それ以外の場合はfalse。

functionとは何かを呼ぶことを意味します。構築されたデフォルトfunctionは明らかにそうではありません。

于 2012-08-09T16:39:11.620 に答える