小编phu*_*clv的帖子

带有QString类型的C++中的switch/case语句

我想在我的程序中使用switch-case但编译器会生成错误.我如何使用该switch语句QString

编译器给我这个错误:

switch expression of type 'QString' is illegal
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

bool isStopWord( QString word )
{
bool flag = false ;

switch( word )
{
case "the":
    flag = true ;
    break ;
case "at" :
    flag = true ;
    break ;
case "in" :
    flag = true ;
    break ;
case "your":
    flag = true ;
    break ;
case "near":
    flag = true ;
    break ;
case "all":
    flag = true ;
    break ;
case …
Run Code Online (Sandbox Code Playgroud)

c++ qstring qt qt4 switch-statement

26
推荐指数
4
解决办法
7万
查看次数

为什么没有2字节浮点数并且已经存在实现?

假设我真的被迫记忆并想要一个更小的范围(类似于短与int).着色器语言已经支持short具有精度一半的浮点(不只是来回转换为-1到1之间的值,也就是说,像这样返回一个浮点数:) int.是否存在2字节浮点数已经存在的实现?

我也有兴趣知道为什么没有2字节浮点数的任何(历史?)原因.

c++ floating-point 16-bit half-precision-float

26
推荐指数
4
解决办法
3万
查看次数

为什么C ++编译器可能会复制一个函数退出基本块?

考虑以下代码片段:

int* find_ptr(int* mem, int sz, int val) {
    for (int i = 0; i < sz; i++) {
        if (mem[i] == val) { 
            return &mem[i];
        }
    }
    return nullptr;
}
Run Code Online (Sandbox Code Playgroud)

-O3上的GCC将其编译为:

find_ptr(int*, int, int):
        mov     rax, rdi
        test    esi, esi
        jle     .L4                  # why not .L8?
        lea     ecx, [rsi-1]
        lea     rcx, [rdi+4+rcx*4]
        jmp     .L3
.L9:
        add     rax, 4
        cmp     rax, rcx
        je      .L8
.L3:
        cmp     DWORD PTR [rax], edx
        jne     .L9
        ret
.L8:
        xor     eax, eax
        ret
.L4: …
Run Code Online (Sandbox Code Playgroud)

c++ gcc x86-64 compiler-optimization

26
推荐指数
1
解决办法
500
查看次数

设置任意大小整数的前导零位 C++

我想在标准 C++ 中将任何大小整数的前导零位设置为 1。

例如。

0001 0011 0101 1111 -> 1111 0011 0101 1111

我发现执行此操作的所有算法都需要相当昂贵的前导零计数。然而,这很奇怪。有非常快速且简单的方法来执行其他类型的位操作,例如:

 int y = -x & x; //Extracts lowest set bit, 1110 0101 -> 0000 0001

 int y = (x + 1) & x; //Will clear the trailing ones, 1110 0101 - > 1110 0100

 int y = (x - 1) | x; //Will set the trailing zeros, 0110 0100 - > 0110 0111
Run Code Online (Sandbox Code Playgroud)

因此,这让我认为必须有一种方法可以在由基本位运算符组成的一行简单代码中设置整数的前导零。请告诉我还有希望,因为现在我正在准备反转整数中的位顺序,然后使用设置尾随零的快速方法,然后再次反转整数以将前导零设置为 1。这实际上比使用前导零计数要快得多,但与上面的其他算法相比仍然相当慢。

 template<typename T>
 inline constexpr void reverse(T& x)
 {
    T rev …
Run Code Online (Sandbox Code Playgroud)

c++ optimization bit-manipulation dos x86-16

26
推荐指数
2
解决办法
2157
查看次数

重命名cmd中的多个文件

如果我在目录中有多个文件并想要将某些内容附加到其文件名中,而不是附加到扩展名,我该怎么做?

我尝试了以下测试文件file1.txtfile2.txt:

ren *.txt *1.1.txt
Run Code Online (Sandbox Code Playgroud)

这会将文件重命名为file1.1.txtfile2.txt1.1.txt

我希望文件file1 1.1.txtfile2 1.1.txt

这可能来自cmd还是我需要有一个bat文件来执行此操作?PowerShell怎么样?

windows cmd rename wildcard batch-file

25
推荐指数
4
解决办法
15万
查看次数

重新分配/覆盖热键(Win + L)以锁定窗口

是否可以将Win + L热键重新分配给另一个可执行文件/快捷方式?

使用案例 - 我想在我的笔记本电脑锁定后立即关闭它.我知道一个可以锁定和关闭监视器的可执行文件,但我不想改变系统锁定的方式(通过显式或通过其他快捷方式运行程序).如果可以将Win + L分配给此可执行文件,那将是最好的.

windows locking keyboard-shortcuts energy monitor

24
推荐指数
4
解决办法
2万
查看次数

退出批处理文件中的FOR循环?

为什么这个批处理文件永远不会脱离循环?

For /L %%f In (1,1,1000000) Do @If Not Exist %%f Goto :EOF
Run Code Online (Sandbox Code Playgroud)

不应该Goto :EOF突破循环?

编辑:

我想我应该更明确地问... 我怎么能摆脱循环?

for-loop batch-file break

24
推荐指数
6
解决办法
9万
查看次数

找到所有完美的正方形,这些正方形是大约300位数的排列

这是一段时间前谷歌采访中向我的朋友询问的问题.他无法提出解决方案,但无论如何最终还是把这份工作打包好了.这是问题所在

您已经获得300个数字,包括100个数字,100个二进制和100个三分数,现在提出了一个算法,将确定所有这些数字,这是一个完美的正方形

我尝试了一段时间,但我很难过.有关如何去做的任何想法?

algorithm permutation

23
推荐指数
1
解决办法
1643
查看次数

比 % 运算符更快的可分性测试?

我注意到我的电脑上有一个奇怪的东西。*手写的可分性测试明显比%算子快。考虑最小的例子:

* AMD 锐龙 Threadripper 2990WX,GCC 9.2.0

static int divisible_ui_p(unsigned int m, unsigned int a)
{
    if (m <= a) {
        if (m == a) {
            return 1;
        }

        return 0;
    }

    m += a;

    m >>= __builtin_ctz(m);

    return divisible_ui_p(m, a);
}
Run Code Online (Sandbox Code Playgroud)

该示例受奇数a和 的限制m > 0。然而,它可以很容易地推广到所有am。代码只是将除法转换为一系列加法。

现在考虑使用以下命令编译的测试程序-std=c99 -march=native -O3

    for (unsigned int a = 1; a < 100000; a += 2) {
        for (unsigned int m …
Run Code Online (Sandbox Code Playgroud)

c math x86 modulo compiler-optimization

23
推荐指数
2
解决办法
749
查看次数

模运算符比手动实现慢?

我发现手动计算%运算符__int128比内置的编译器运算符要快得多。我将向您展示如何计算模 9,但该方法可用于计算模任何其他数字。

首先,考虑内置编译器操作符:

uint64_t mod9_v1(unsigned __int128 n)
{
    return n % 9;
}
Run Code Online (Sandbox Code Playgroud)

现在考虑我的手动实现:

uint64_t mod9_v2(unsigned __int128 n)
{
    uint64_t r = 0;

    r += (uint32_t)(n);
    r += (uint32_t)(n >> 32) * (uint64_t)4;
    r += (uint32_t)(n >> 64) * (uint64_t)7;
    r += (uint32_t)(n >> 96);

    return r % 9;
}
Run Code Online (Sandbox Code Playgroud)

测量超过 100,000,000 个随机数给出以下结果:

mod9_v1 | 3.986052 secs
mod9_v2 | 1.814339 secs
Run Code Online (Sandbox Code Playgroud)

GCC 9.3.0 with-march=native -O3用于 AMD Ryzen Threadripper 2990WX。 是godbolt的链接。

我想问一下它在你这边的行为是否相同?(在向 GCC Bugzilla …

c x86-64 compiler-optimization 128-bit modular-arithmetic

23
推荐指数
1
解决办法
4462
查看次数