在函数体内使用static constexpr和时有什么区别吗?constexpr
int SomeClass::get(const bool b)
{
static constexpr int SOME_CONSTANT = 3;
constexpr int SOME_OTHER_CONSTANT = 5;
if(b)
return SOME_CONSTANT;
else
return SOME_OTHER_CONSTANT;
}
Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的容器类。如您所见,该类使用的所有资源都是静态分配的。类中没有动态分配的资源。这样的类是否需要移动构造函数或移动赋值运算符?
template<class T, std::size_t SIZE>
class Stack{
static_assert(SIZE != 0, "Stack capacity cannot be zero!");
public:
/*** Constructors and Destructor ***/
Stack() = default; // Default constructor
Stack(const Stack& copyStack); // Copy constructor
~Stack(); // Destructor
/*** Member Methods ***/
/* .... */
void swap(Stack& swapStack);
private:
/*** Members ***/
std::size_t idxTop{0}; // Index after the top element
T data[SIZE]; // Contained data
};
Run Code Online (Sandbox Code Playgroud)
对于那些想通过实际实现进行尝试的人:
我正在尝试定义一个列表,其中包括我们设备的MAC地址。我想用一个宏来做。这是我定义的列表的示例:
#define WHITELIST_DEVICE { \
{0x45,0x11,0xDF,0xED,0x2B,0x61}, \
{0xAB,0x11,0xDF,0x61,0x6B,0x2B}, \
{0x61,0x6B,0x3B,0xED,0x61,0x61}, \
{0xDF,0x55,0xDF,0x6B,0x6B,0x61}, \
} /**< List of device mac addresses in whitelist*/
Run Code Online (Sandbox Code Playgroud)
定义列表后,我想像列和行一样收集其大小。最简单的方法是什么?您也可以建议我一种定义列表的新方法。该代码将在嵌入式系统上工作。所以,它不应该有繁重的算法:)
我有一个来自 UART 的输入。
uint8_t uartRX_data[UART_RX_BUF_SIZE]="";
Run Code Online (Sandbox Code Playgroud)
我需要将此数据传递给函数。并且,在这个函数中,我想将它与预定义的字符串进行比较,例如:
char RESP_OK[] = "OK";
char RESP_ERROR[] = "ERROR";
char RESP_FAIL[] = "FAIL";
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
编辑:我的问题只是关于数据比较和数据传递给函数。
我的代码中有预定义的十六进制值。以下是其中之一。
#define ADDRESS1 0xD445556BD557
#define ADDRESS2 0xED612BDF113B
Run Code Online (Sandbox Code Playgroud)
我也有一个uint8_t数组。喜欢
uint8_t MAC[6];
Run Code Online (Sandbox Code Playgroud)
如何在不编写新函数的情况下比较这两件事?
我已经尝试过
if(MAC == ADDRESS2)
Run Code Online (Sandbox Code Playgroud) 我可以很容易地说,通过将函数声明为constexpr,我们可以在编译时对其进行评估,这可以节省运行时的时间,因为结果已经生成了。
另一方面,虚函数需要在运行时解析。因此,我想我们无法摆脱解决过程。由于函数的机制,只能快速获取结果constexpr。
函数还有其他好处吗constexpr virtual?