Why I can't initialize a variable in switch case block
我正在编写一些win32程序,遇到了一个小问题,为什么不能初始化switch case块中的变量。
就像这样:
当我这样做的时候,一切都会好起来的。
现在我想知道为什么。
事实上,
在C++中,本地定义的对象在其定义点进入范围,并且在封闭范围的关闭卷曲括号中脱离范围。退出该作用域的
对于您的
现在,在C++中,使用EDCOX1×2或类似的东西跳过对象初始化是非法的。在您的示例中,
修复程序通过用对象分配替换对象初始化来避免这个问题。这是解决问题的一种方法。另一种方法是添加一个额外的范围级别:
1 2 3 4 5 | case WM_LBUTTONDOWN: { HBRUSH hBrush = CreateSolidBrush(RGB(0, 0, 0)); break; } |
这是因为大括号提供了一个额外的范围级别,明确定义了
在技术细节方面:触发错误的语句依赖于复制构造函数。不依赖复制分配运算符的语句。
Retired Ninja: You can, you just need to enclose the block in {}
user3116182: yeah,I know that way
< /块引用>
@用户3116182:那你为什么要为此烦恼呢??
如果没有范围声明的变量,通过case块会遇到麻烦,使其消除歧义,或者跳过变量初始化。就这些。