我有一个类和一个const变量.
struct A
{
int b;
};
A const a;
Run Code Online (Sandbox Code Playgroud)
该类A是POD,可以像这样初始化.
A const a = { 3 };
Run Code Online (Sandbox Code Playgroud)
恕我直言,有这样的构造函数看起来很好.
struct A
{
int b;
A(int newB) : b(newB)
{
}
};
Run Code Online (Sandbox Code Playgroud)
但Clang假定A为非聚合类型.为什么我不能有这样的构造函数?或者我应该做些什么?
我修改了问题来表达我原来的意思.我已经写了struct为class错误,并抱歉@Johannes约困惑:)
#include<stdio.h>
int main()
{
int a=1;
switch(a)
{ int b=20;
case 1: printf("b is %d\n",b);
break;
default:printf("%d\n",b);
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在gcc 4.6.3上运行,输出不是20.这里发生了什么?
让我们通过代码看问题:
代码-1
#include <stdio.h>
int main(int argc, char *argv[])
{
int a =1;
switch (a)
{
printf("This will never print\n");
case 1:
printf(" 1");
break;
default:
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里的printf()语句永远不会执行 - 请参阅http://codepad.org/PA1quYX3.但
代码-2-
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 1;
switch (a)
{
int b;
case 1:
b = 34;
printf("%d", b);
break;
default:
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这int b将被宣布 - 请参阅http://codepad.org/4E9Zuz1e.
我没有得到为什么在code1 printf() …
码:
int main()
{
int a=1;
switch(a)
{
int b=20;
case 1:
printf("b is %d\n",b);
break;
default:
printf("b is %d\n",b);
break;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:当b的声明发生在这里时,它为b打印一些垃圾值为什么b在这里没有用20初始化?