C++ 花括号里发生了什么

C++ 花括号里发生了什么,c++,c++11,visual-studio-2013,curly-braces,C++,C++11,Visual Studio 2013,Curly Braces,据我所知,}在实际操作中包含一些类似于销毁堆栈分配的对象的操作,因为当对象的析构函数中发生错误时,VS.NET会将我指向花括号的关闭处,甚至您可以使用F11进入该操作并查看已调用的析构函数中发生了什么。但是,我注意到,{也是一个操作,如果我尝试使用F11进入它,VS.NET告诉我它需要memset.asm文件才能继续调试 在{内部真正发生的事情是什么?花括号建立作用域和生存期。在一对花括号内创建的对象在它们之外是不可访问的。它们不是代码;但是,由于退出对象时可能会释放对象,因此关闭花括号后编译器

据我所知,
}
在实际操作中包含一些类似于销毁堆栈分配的对象的操作,因为当对象的析构函数中发生错误时,VS.NET会将我指向花括号的关闭处,甚至您可以使用
F11
进入该操作并查看已调用的析构函数中发生了什么。但是,我注意到,
{
也是一个操作,如果我尝试使用
F11
进入它,VS.NET告诉我它需要
memset.asm
文件才能继续调试


{
内部真正发生的事情是什么?

花括号建立作用域和生存期。在一对花括号内创建的对象在它们之外是不可访问的。它们不是代码;但是,由于退出对象时可能会释放对象,因此关闭花括号后编译器可能会生成代码


关于跨入开头的大括号,实际上是跨入大括号内的第一行可执行代码。这行代码将解释调试器为何试图跨入memset.asm。

实际上大括号本身不是运算符,它们“包含”没有代码。是编译器在作用域开始和结束时添加代码,但它与大括号没有真正的关系(除非它们显示作用域开始和结束的位置)。当您进入例如析构函数时,它会显示插入代码之后但在作用域实际结束之前的代码。光标出现在右大括号上是因为调试器没有任何其他位置信息。我得到了它。谢谢。因此,我的问题应该是在作用域开始时我的代码之前发生了什么谢谢,但不是他试图进入MistSt.ASM的那行不是我写的。正如JACHIM在他的评论中所说的,这条线是由编译器产生的,我的问题是关于那里发生的事情。在卷曲括号里一定有什么东西。无论什么都必须调用MeSET。注意,在C++中可以插入本机语言语句。结果是这样的,因为您正试图单步执行编译器本身正在生成的代码。例如:如果您正在声明数组,编译器可能正在使用memset清除内存。这是特定于编译器的。