shared_ptrを関数で返すときに、暗黙的にブール値に変換されないのはなぜですか?

ビル・コツィアス

以下はコンパイルされません:

#include <memory>
class A;
bool f() {
    std::shared_ptr<A> a;
    return a;
}

int main()
{
    f();
    return 0;
}

そして失敗します:

Compilation failed due to following error(s).main.cpp: In function ‘bool f()’:
main.cpp:13:12: error: cannot convert ‘std::shared_ptr’ to ‘bool’ in return
     return a;

ここで暗黙の変換を許可しない標準(私が推測する)の理由は何でしょうか?

ローウ

なぜなら、ユーザ定義演算子に変換するstd::shared_ptrには、boolある明示

explicit operator bool() const noexcept;

ステートメントboolの条件での暗黙の変換は、特に明示的なユーザー定義の変換演算子を使用しても発生することに注意してくださいifbool

std::shared_ptr<int> ptr;

if (ptr) { // <-- implicit conversion to bool

}

つまりstatic_cast<bool>(ptr)ifステートメントの条件で記述する必要はありません

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

shared_ptr toDerivedが暗黙的にshared_ptrtoBaseに変換されないのはなぜですか

分類Dev

std :: unique_ptrが暗黙的にT *およびconstT *に変換されないのはなぜですか?

分類Dev

doubleをintに暗黙的に変換できないのはなぜですか?

分類Dev

doubleをintに暗黙的に変換できないのはなぜですか?

分類Dev

メンバー関数を呼び出すときに、std :: reference_wrapperが暗黙的に参照にキャストされないのはなぜですか?

分類Dev

intをlonglong intに暗黙的に変換すると、C ++で予期しない答えが返されるのはなぜですか?

分類Dev

暗黙の変換の代わりに不正な形式の関数が使用されるのはなぜですか?

分類Dev

テンプレート化された関数パラメーターに暗黙の変換が適用されないのはなぜですか?

分類Dev

使用される値が暗黙的にこれらの構造体に変換可能であるのに、2つの構造体をとるオーバーロードされた==を使用できないのはなぜですか?

分類Dev

`sess.run`で変数の値を要求するときに、暗黙の制御依存関係がないのはなぜですか?

分類Dev

jvalue2monadicがインポートされていない場合でも、JValueを暗黙的にMonadicJValueに変換できるのはなぜですか?

分類Dev

静的読み取り専用フィールドでは変換できないのに、定数を暗黙的に変換できるのはなぜですか?

分類Dev

静的読み取り専用フィールドでは変換できないのに、定数を暗黙的に変換できるのはなぜですか?

分類Dev

0をstd :: shared_ptr <T>に変換できるのに、1には変換できないのはなぜですか?

分類Dev

float変数ステートメントで「double型をfloatに暗黙的に変換できない」というエラーが表示され続けるのはなぜですか?

分類Dev

ScalaのFunction1をjava.util.function.Functionに暗黙的に変換できないのはなぜですか?

分類Dev

明示的な変数と関数宣言が構成できないのに、暗黙的な変数が構成可能であるのはなぜですか?

分類Dev

タイプ「UnityEngine.Vector2」を「float」に暗黙的に変換できないのはなぜですか?

分類Dev

このクラスが暗黙的にポインタに変換されないのはなぜですか?

分類Dev

ユニットテストから呼び出されたときに、暗黙の変数がScalaで初期化されないのはなぜですか?

分類Dev

関数がグローバル変数に値を返さないのはなぜですか?

分類Dev

const右辺値参照が暗黙的にconst参照に変換されるのはなぜですか?

分類Dev

関数から返された変数を評価しているときに、「while」ループが終了しないのはなぜですか?

分類Dev

unique_ptrとshared_ptrが、それらが構築されたポインターを無効にしないのはなぜですか?

分類Dev

JSの精度を落とさずに文字列を数値に変換できないのはなぜですか?

分類Dev

const char *がstd :: stringではなくboolに暗黙的に変換されるのはなぜですか?

分類Dev

char *をconstchar *に暗黙的に変換できるのに、unsigned char *は変換できないのはなぜですか

分類Dev

この暗黙的に型指定された配列を作成できないのはなぜですか?

分類Dev

constexprの暗黙的な変換が常に機能するとは限らないのはなぜですか?

Related 関連記事

  1. 1

    shared_ptr toDerivedが暗黙的にshared_ptrtoBaseに変換されないのはなぜですか

  2. 2

    std :: unique_ptrが暗黙的にT *およびconstT *に変換されないのはなぜですか?

  3. 3

    doubleをintに暗黙的に変換できないのはなぜですか?

  4. 4

    doubleをintに暗黙的に変換できないのはなぜですか?

  5. 5

    メンバー関数を呼び出すときに、std :: reference_wrapperが暗黙的に参照にキャストされないのはなぜですか?

  6. 6

    intをlonglong intに暗黙的に変換すると、C ++で予期しない答えが返されるのはなぜですか?

  7. 7

    暗黙の変換の代わりに不正な形式の関数が使用されるのはなぜですか?

  8. 8

    テンプレート化された関数パラメーターに暗黙の変換が適用されないのはなぜですか?

  9. 9

    使用される値が暗黙的にこれらの構造体に変換可能であるのに、2つの構造体をとるオーバーロードされた==を使用できないのはなぜですか?

  10. 10

    `sess.run`で変数の値を要求するときに、暗黙の制御依存関係がないのはなぜですか?

  11. 11

    jvalue2monadicがインポートされていない場合でも、JValueを暗黙的にMonadicJValueに変換できるのはなぜですか?

  12. 12

    静的読み取り専用フィールドでは変換できないのに、定数を暗黙的に変換できるのはなぜですか?

  13. 13

    静的読み取り専用フィールドでは変換できないのに、定数を暗黙的に変換できるのはなぜですか?

  14. 14

    0をstd :: shared_ptr <T>に変換できるのに、1には変換できないのはなぜですか?

  15. 15

    float変数ステートメントで「double型をfloatに暗黙的に変換できない」というエラーが表示され続けるのはなぜですか?

  16. 16

    ScalaのFunction1をjava.util.function.Functionに暗黙的に変換できないのはなぜですか?

  17. 17

    明示的な変数と関数宣言が構成できないのに、暗黙的な変数が構成可能であるのはなぜですか?

  18. 18

    タイプ「UnityEngine.Vector2」を「float」に暗黙的に変換できないのはなぜですか?

  19. 19

    このクラスが暗黙的にポインタに変換されないのはなぜですか?

  20. 20

    ユニットテストから呼び出されたときに、暗黙の変数がScalaで初期化されないのはなぜですか?

  21. 21

    関数がグローバル変数に値を返さないのはなぜですか?

  22. 22

    const右辺値参照が暗黙的にconst参照に変換されるのはなぜですか?

  23. 23

    関数から返された変数を評価しているときに、「while」ループが終了しないのはなぜですか?

  24. 24

    unique_ptrとshared_ptrが、それらが構築されたポインターを無効にしないのはなぜですか?

  25. 25

    JSの精度を落とさずに文字列を数値に変換できないのはなぜですか?

  26. 26

    const char *がstd :: stringではなくboolに暗黙的に変換されるのはなぜですか?

  27. 27

    char *をconstchar *に暗黙的に変換できるのに、unsigned char *は変換できないのはなぜですか

  28. 28

    この暗黙的に型指定された配列を作成できないのはなぜですか?

  29. 29

    constexprの暗黙的な変換が常に機能するとは限らないのはなぜですか?

ホットタグ

アーカイブ