int64_t varname = std::numeric_limits<decltype(varname)>::max();
時,我通常不希望使用的是有一個更好的方式來設置一個變量,它的一個限值比
varname = std::numeric_limits<decltype(varname)>::max();
特別鍵入這樣的表達式,因爲如果類型改變,它很容易錯過。
int64_t varname = std::numeric_limits<decltype(varname)>::max();
時,我通常不希望使用的是有一個更好的方式來設置一個變量,它的一個限值比
varname = std::numeric_limits<decltype(varname)>::max();
特別鍵入這樣的表達式,因爲如果類型改變,它很容易錯過。
重新
」我通常不希望使用這樣的表達式的類型,因爲它很容易,如果類型更改爲錯過本作。
,很容易:
auto varname = std::numeric_limits<int64_t>::max();
您可以減輕在許多方面,例如的std::numeric_limits
冗長通過模板別名或通過定義函數模板。
template< class Type >
using Limits_ = std::numeric_limits<Type>;
auto varname = Limits_<int64_t>::max();
或
template< class Type >
constexpr auto max_of() -> Type { return std::numeric_limits<Type>::max(); }
auto varname = max_of<int64_t>();
在C++ 14,以後你可以讓max_of
一個模板變量,由於某種原因,我從來沒有見過解釋說,有些人喜歡。
汽車呢?
auto varname = std::numeric_limits<int64_t>::max();
只有一個地方提到這種類型。
而只是爲了完整性,踢腳上合法性的邊緣:
#include <iostream>
#include <limits>
template<class T>
T biggest(T&)
{
return std::numeric_limits<T>::max();
}
int main()
{
std::int64_t i = biggest(i);
std::cout << i << std::endl;
return 0;
}
我其實認爲這是最簡潔的方法。你認爲在這裏不合法? –
@MarcinZukowski它是合法的,但它只需要一個維護者以某種方式使用該參數的值,並且它變成了UB。 –
我安裝一個變量的模板:模板' constexprŤMAX_VAL =標準:: numeric_limits :: MAX();'和然後使用'auto v = max_val ;'。在C++ 17中,我將模板'inline'並將其粘貼到標題中。 –