Неопределенная ссылка на удаленный файл?

Сначала позвольте мне высказать несколько вещей о смене, который является источником вашей проблемы:

Нет гарантии, что long int на самом деле 64-битный.

Самый общий способ, которым я могу думать, - использовать std::numeric_limits:

static_cast(1) << (std::numeric_limits::digits - 1);

Теперь вы можете даже сделать эту шаблонную функцию constexpr:

template 
constexpr Integer foo()
{
    return static_cast(1) << (std::numeric_limits::digits - 1);
}

Таким образом, заменяя сдвиг с static_cast(1) << (std::numeric_limits::digits - 1) исправит вашу проблему, однако есть намного лучший способ:

std::numeric_limits включает в себя кучу полезных вещей, в том числе:

std::numeric_limits::max(); // the maximum value T can hold
std::numeric_limits::min(); // the minimum value T can hold
std::numeric_limits::digits; // the number of binary digits
std::numeric_limits::is_signed(); // well, do I have to explain? ;-)

См. cppreference.com для полного списка. Вы должны предпочесть возможности, предоставляемые стандартной библиотекой, потому что у нее, скорее всего, будет меньше ошибок, и другие разработчики сразу это узнают.

0
задан George 25 February 2015 в 22:33
поделиться