小编Tom*_*tro的帖子

使成员函数中的静态变量对于每个实例独立

给定班级:

class A {
    Public:
        void foo() {
            static int i;
            i++;
        }
};
Run Code Online (Sandbox Code Playgroud)

i在此示例之后,如何更改它以防止在实例之间进行更改:

A o1, o2, o3;
o1.foo(); // i = 1
o2.foo(); // i = 1
o3.foo(); // i = 1
o1.foo(); // i = 2
Run Code Online (Sandbox Code Playgroud)

即为i每个实例分配内存。

编辑:

是的,您可以将其添加i为实例变量,但是如果需要在各种(独立)函数中使用这些计数器,该怎么办?我希望将变量的范围仅限制于函数(“在成员函数中”)。这似乎笨拙添加变量,例如iccountercounter_2到类,如果你需要不同的柜台,岂不?

c++ static class function member

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

printf(..)参数的执行顺序是什么?

我想做这样的事情printf("%d,%d",array[c], array[c+1]),只有一个变量在每次迭代中都会增加.我写了下面的代码,我期待"1,2"到stdout,我错了:

#include <stdio.h>
int main()
{
    int c = 1;
    printf("%d,%d",c++,c++); /* 2,1 */
    //printf("%d,%d",c,c++);   /* 2,1 */
    //printf("%d,%d",c++,c);   /* 1,2 */
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试做printf("%d,%d",c++,c)printf("%d,%d",c,c++),我可以看到,有没有定义的"C++"语句的执行顺序.

有人可以解释我写的代码是如何编译的吗?为什么以及如何根据"c ++"语句的位置进行更改.

c printf

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

从const char指针到char指针的赋值不给出警告

为什么以下代码不发出警告?

与-Wall,-Wpedantic,-Wextra一起编译,并且没有一个发出警告。

int main()
{
    const char *p;
    char a[] = "hey";
    p = a;
    (void) p;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望收到某种警告,例如分配-Wdiscarded-qualifiers

c pointers const char

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

标签 统计

c ×2

c++ ×1

char ×1

class ×1

const ×1

function ×1

member ×1

pointers ×1

printf ×1

static ×1