4

次のコードは、Visual Studio 2013 で実行すると例外をスローしますが、gcc 4.9.2 ではスローしません。

報告されたエラーは次のとおりです。

「例外: stol 引数が範囲外です」

stolは a を返すlongので、 のサイズはtemp戻り値を保持するのに十分な大きさでなければなりません。

誰でもその動作を説明できますか。これはおそらくコンパイラのバグですか?

#include <iostream>
#include <exception>
#include <string>
#include <stdexcept>

int main()
{
    const std::string value = "4294967295";   // 0xffffffff

    try
    {
        int64_t temp = std::stol(value);
    }

    catch (std::invalid_argument& ex)
    {
        std::cout << "invalid_argument: " << ex.what() << "\n";
    }

    catch (std::exception& ex)
    {
        std::cout << "exception: " << ex.what() << "\n";
    }

   return 0;
}
4

5 に答える 5

1

std::stoul代わりに使用してください。

一見すると、文字列定数は確かにlong想定できる最大値を超えていますが、最大値を超えていませんunsigned long...

于 2015-06-09T23:22:09.970 に答える