函数或代码中间的代码块
Code blocks in the middle of a function or code
在函数或程序中间拥有代码块的意义是什么,如下面的示例
#include <iostream>
#include <string>
using namespace std;
int main(){
int x = 32;
{ // random code block starts here
if (34 > x){
cout <<"x greater"<<endl;
}else cout << "non";
}// ends here
return 0;
}
据我所知,这会创建一个新的 scope
,因此在{}
中声明的任何对象或变量仅在此处可用。这对于创建objects
的实例特别有用,因为该对象的destructor
在范围内时将被调用。
在这种情况下,由于没有声明或创建对象,因此不需要{}
。
在函数或程序中间拥有代码块
是什么意思
括号用于控制范围。开场支架创造了一个新的较小范围。闭合支架结束了新的和较小的范围。
如果在较小的范围中声明了自动var,则自动vars在闭合支架处停止。在下一个范围中,它可以释放可重复使用的变量名称。
尽管您的代码示例中没有任何特别的事情发生,但是在闭幕式上可能会发生一些特殊的事情。范围的末端还可以免费使用自动记忆var,包括调用用户定义对象(类或结构)的DTOR。
在以下内容中,块1(命名为"使用自动促销")显示了一种使用自动促销来创建值'result'中所需的字节顺序的方法,并供用户检查。
。在第2块(使用static_cast)中,可以实现相同的功能,并注意它恰好使用名称为"结果"的声明的自动变量。与第一块自动VAR没有发生碰撞,因为闭合支架结束了块1的名称"结果"的范围。
块3(使用我自己的创建的静态铸造功能)执行同样的事情...在第三次声明"结果",再次没有碰撞。
int exec()
{
uint8_t byte0 = 0x00;
uint8_t byte1 = 0xAA;
uint8_t byte2 = 0x00;
uint8_t byte3 = 0xAA;
uint16_t hword0 = 0xAA00;
//uint16_t hword1 = 0xAAAA; not used
// using auto-promotion
{
uint64_t b4567 = hword0; // auto promotion
uint64_t b3 = byte3;
uint64_t b2 = byte2;
uint64_t b1 = byte1;
uint64_t b0 = byte0;
uint64_t result = (
(b4567 << 32) |
(b3 << 24) |
(b2 << 16) |
(b1 << 8) |
(b0 << 0) );
cout << "n " << hex << result << endl;
}
// using static cast
{
uint64_t result = (
(static_cast<uint64_t>(hword0) << 32) |
(static_cast<uint64_t>(byte3) << 24) |
(static_cast<uint64_t>(byte2) << 16) |
(static_cast<uint64_t>(byte1) << 8) |
(static_cast<uint64_t>(byte0) << 0 )
);
cout << "n " << hex << result << endl;
}
// using static cast function
{
uint64_t result = (
(sc(hword0) << 32) |
(sc(byte3) << 24) |
(sc(byte2) << 16) |
(sc(byte1) << 8) |
(sc(byte0) << 0 )
);
cout << "n " << hex << result << endl;
}
return 0;
}
一个人可以通过控制内部自动var的范围来捕获自动记忆并释放它。此内存甚至可以用不同的名称重复使用。
代码块(对于较小的范围)允许程序员使用自动记忆的使用方式不同。
函数'SC'旨在减少键入。
// vvvvvvvv ---- formal parameter allows auto-promotion
uint64_t sc(uint64_t ui64) {
return static_cast<uint64_t>(ui64); // static cast
}
在这种特殊情况下,使用块是完全不需要的。
code block can be used to restrict the scope of variables declared in block. int main(){
int x = 32;
{ // random code block starts here
int y = 5;
if (34 > x){
cout <<"x greater"<<endl;
}else cout << yn";
}// ends here
return 0;
}
相关文章:
- 2D数组来自文本输入,中间有空格
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 基于中间字母替换(反转)代码
- 我的代码停在中间,没有错误C
- 函数或代码中间的代码块
- 在代码中间使用#include是不好的
- 如果这些 { } 只是在代码中间,它们是什么意思?被忽略了
- 将c代码的中间表示分解回c
- 作为OpenMP杂注结果的中间代码
- 为什么此代码不删除中间数字?
- 绘制c++代码中间结果的最佳工具是什么?
- 在java代码中间将参数传递给bash文件
- 来自C++的中间代码