小编con*_*boy的帖子

检查变量是否使用is_signed签名

我想检查变量是否已签名.我找到了一个名为is_signed的类模板,但我不能使用它,因为我是C++的新手.如何检查变量是否已签名?

#include <iostream>
#include <cmath>

int main() {
    // the following short initialization is on purpose
    short price {10u};
    std::cout << std::is_signed<price>::value << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ c++17

2
推荐指数
1
解决办法
131
查看次数

如果条件简化

我正在重构一个代码片段,在其中我看到了以下条件,我想知道它是否被简化了。

data.RecordId != 0 || (data.RecordId == 0 && data.SerialNum == "0000")
Run Code Online (Sandbox Code Playgroud)

不是data.RecordId == 0 || data.SerialNum == "0000"一样吗?

如果可能的话,怎么可能?能详细点吗?

c# algorithm logic if-statement conditional-statements

2
推荐指数
1
解决办法
141
查看次数

双指针输出说明

你能解释一下输出如何-4吗?我认为++pp;是UB,但不确定。您的解释将真正有助于理解。big-endian 或 little-endian 机器的输出可能有什么不同吗?

#include <stdio.h>

int a[] = { -1, -2, -3, -4 };
int b[] = { 0, 1, 2, 3 };

int main(void)
{
    int *p[] = { a, b };
    int **pp = p;
    printf("a=%p, b=%p, p=%p, pp=%p\n", (void*)a, (void*)b, (void*)p, (void*)pp);
    ++pp;
    printf("p=%p, pp=%p *pp=%p\n", (void*)p, (void*)pp, (void*)*pp);
    ++*pp;
    printf("p=%p, pp=%p *pp=%p\n", (void*)p, (void*)pp, (void*)*pp);
    ++**pp;

    printf("%d\n", (++**pp)[a]);
}
Run Code Online (Sandbox Code Playgroud)

我的输出:

a=0x107121040, b=0x107121050, p=0x7ffee8adfad0, pp=0x7ffee8adfad0
p=0x7ffee8adfad0, pp=0x7ffee8adfad8 *pp=0x107121050
p=0x7ffee8adfad0, pp=0x7ffee8adfad8 *pp=0x107121054
-4 …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers pointer-arithmetic

0
推荐指数
1
解决办法
67
查看次数