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
和minimumMajorminimumMajor*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:)哈哈,完全没有听到。:)