2

int x0 以上で 1080 (この場合は画面サイズ) より小さいことを確認しようとしています。

私はこれを思いついた

int x = 123;
x = std::min(std::max(x, 0), 1080);

これは醜いようです。これを達成するためのより良い方法はありますか?

4

4 に答える 4

8

将来住んでいる場合はstd::clamp、 C++17 から使用できます。

x = std::clamp(x, 0, 1080);
于 2017-01-08T17:32:13.613 に答える
2

単純なソリューションも問題ないようです。

int x = 123;
if (x < 0)
    x = 0;
if (x > 1080)
    x = 1080;

またはすべてを関数でラップします。

template<typename T>
T between(const T x, const T min, const T max){
   if (x < min)
       return min;

   if (x > max)
       return max;

   return x;
}

int x = between(123, 0, 1080);
于 2017-01-08T17:34:31.173 に答える
-1

なぜこのようなことをしないのですか?

int x = 123; /* Or some arbitrary number */
bool bIsInRange = (x >= 0) && (x < 1080);
if(!bIsInRange){
   std::cout << "Variable 'x' is not between 0 and 1080." << std::endl;
   return 1;
} // else, x is fine. Continue operations as normal.
于 2017-01-08T17:32:54.060 に答える