Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 验证主要和次要版本要求的逻辑?_C++_C_Algorithm - Fatal编程技术网

C++ 验证主要和次要版本要求的逻辑?

C++ 验证主要和次要版本要求的逻辑?,c++,c,algorithm,C++,C,Algorithm,假设服务器需要最低的客户端版本 有主要版本和次要版本,例如: 1,0 1,2 2,0 2,9 给定一个函数,例如: bool checkVersion(int minimumMajor,int minimumMinor,int clientMajor, int clientMinor) { //TODO } 这个实现是什么样子的 逻辑基本上是正确的 return clientMajor.clientMinor >= minimumMajor.MinimumMinor 但是用INT进行

假设服务器需要最低的客户端版本

有主要版本和次要版本,例如:

1,0 1,2 2,0 2,9
给定一个函数,例如:

bool checkVersion(int minimumMajor,int minimumMinor,int clientMajor, int clientMinor) {
//TODO
}
这个实现是什么样子的

逻辑基本上是正确的

return clientMajor.clientMinor >= minimumMajor.MinimumMinor
但是用INT进行浮动似乎效率低下。什么可能是一种快速实现这种逻辑的方法


谢谢

使用C++标准库和编译器的优化。

#include <tuple>

bool checkVersion(int minimumMajor, int minimumMinor, int clientMajor, int clientMinor) {
    return std::make_tuple(clientMajor, clientMinor) >= std::make_tuple(minimumMajor, minimumMinor);
}
#包括
布尔检查版本(int-minimumMajor、int-minimumMinor、int-clientMajor、int-clientMinor){
返回std::make_tuple(clientMajor,clientMinor)>=std::make_tuple(minimumMajor,minimumMinor);
}

<代码> > p>使用C++标准库和编译器的优化。

#include <tuple>

bool checkVersion(int minimumMajor, int minimumMinor, int clientMajor, int clientMinor) {
    return std::make_tuple(clientMajor, clientMinor) >= std::make_tuple(minimumMajor, minimumMinor);
}
#包括
布尔检查版本(int-minimumMajor、int-minimumMinor、int-clientMajor、int-clientMinor){
返回std::make_tuple(clientMajor,clientMinor)>=std::make_tuple(minimumMajor,minimumMinor);
}

首先检查主版本。如果它们相等,则检查第二个。否则,您不必为次要版本而烦恼

或者,如果您假设主要版本从未超过某个数字(比如1024),您可以这样做:

(minimumMajor*1024)+minimumMinor < (clientMajor*1024)+clientMinor
(minimumMajor*1024)+minimumMinor<(clientMajor*1024)+clientMinor
或者更有效地:

(minimumMajor<<10)+minimumMinor < (clientMajor*1024)+clientMinor

(minimumMajor首先检查主版本。如果它们相等,则检查第二个版本。否则,您不必为次要版本而烦恼

或者,如果您假设主要版本从未超过某个数字(比如1024),您可以这样做:

(minimumMajor*1024)+minimumMinor < (clientMajor*1024)+clientMinor
(minimumMajor*1024)+minimumMinor<(clientMajor*1024)+clientMinor
或者更有效地:

(minimumMajor<<10)+minimumMinor < (clientMajor*1024)+clientMinor
(minimumMajor为什么不简单地:

if (clientMajor > minimumMajor) return true;
else if (clientMajor == minimumMajor && clientMinor >= minimumMinor) return true;
return false;
为什么不简单地:

if (clientMajor > minimumMajor) return true;
else if (clientMajor == minimumMajor && clientMinor >= minimumMinor) return true;
return false;


C或C++?它们是不同的语言。词串比较不是很好吗?@ OmnipotentEntity A C或C++实现很好,只要它是快的。不管你做什么,不要做词法比较或浮点转换。因为它是版本比较中常见的错误。版本4.10是比4版本更新的版本。9@Milo
只要对于这样的字符串,它是快速的<代码>,你不会注意到任何不同。C或C++。它们是不同的语言。词串比较不是很好吗?@ OmnipotentEntity A C或C++实现很好,只要它是快的。无论你做什么,不要做词法比较或浮点转换。因为它是V中常见的错误。版本比较。版本4.10比版本4更新。9@Milo
只要这样的字符串速度快
,你就不会注意到任何区别。
minimumMajor*1024
minimumMajor
minimumMajor*1024
minimumMajor>在本例中,我使用了完全优化的相同指令。因此,我收回我的答案,并对你的答案进行升级投票。@OmniPotential此处相同:)升级投票,我想知道
std::tie
是否更好(或更差)对于这个比较。通过查看它们的定义,它们的性能似乎也一样好。在通过引用传递非平凡结构的情况下,它肯定会更好。想象一下
minimumMajor
是一个任意精度的整数,它的大小为数兆字节(无论出于何种原因)。您希望避免该复制。而且编译器可能无法证明它没有副作用。哦,好的,对了,在这种情况下,make_tuple将复制(除非您进入它)。你比我快了几秒钟,并且
使tuple
tie
以完全优化的方式编译到相同的指令。因此,我收回我的答案,并对你的进行投票。@omnipotentential这里相同:)投票率较高,我想知道
std::tie
是否比这更好(或更差)。从它们的定义来看,它们的表现似乎一样好。在通过引用传递非平凡结构的情况下,它肯定会更好。假设
minimumMajor
是一个任意精度的int,它的大小为数兆字节(无论出于何种原因)。你想避免那个副本。编译器可能无法证明它没有副作用。哦,好吧,对了,在这种情况下,make_tuple会复制(除非你进入它)。这是最好的简单C答案。@我们假设
true
false
\define
d:)哈哈,完全错过了这一点。。)这是最好的简单C回答。@我们假设
true
false
#define
d:)哈哈,完全没有听到。:)