3

変数をその制限の 1 つに設定するより良い方法はありますか?

varname = std::numeric_limits<decltype(varname)>::max();

特に初期化時

int64_t varname = std::numeric_limits<decltype(varname)>::max();

タイプが変更された場合、これを見逃すのは簡単なので、私は通常、そのような式でタイプを使用したくありません。

4

3 に答える 3

2

そして、完全を期すために、合法性の端を回避します:

#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;
}
于 2016-05-04T10:23:01.297 に答える
1

自動はどうですか?

auto varname = std::numeric_limits<int64_t>::max();

タイプについて言及している場所は1つだけです。

于 2016-05-04T10:06:56.383 に答える
1

型が変更されると見逃されやすいので、私は通常、そのような式で型を使用したくありません。

簡単だ:

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、テンプレート変数を作成できます。これは、説明されたことがない何らかの理由で、好む人もいます。

于 2016-05-04T10:07:38.630 に答える