在函数或程序中间放置代码块的意义和意义如下
#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 << "no\n";
}// ends here
return 0;
}
答案 0 :(得分:0)
在这种特殊情况下,完全不需要使用该块。
答案 1 :(得分:0)
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 << y\n";
}// ends here
return 0;
}
答案 2 :(得分:0)
据我所知,这会创建一个新的scope
,因此{}
中声明的所有对象或变量都只能在那里使用。这对于创建objects
的实例特别有用,因为对象的destructor
超出范围时将被调用。
但是,在这种情况下,不需要{}
,因为没有声明任何变量或没有创建对象。
答案 3 :(得分:0)
在功能或程序中间放置代码块是什么意思
大括号用于控制范围。左括号创建了一个新的较小的范围。右括号结束了新的和较小的范围。
如果在较小范围内声明了自动变量,则自动变量在右括号处不再存在。这将释放变量名称,以便在下一个范围中重复使用。
尽管代码示例中没有什么特别的事情发生,但在大括号中可能会发生一些特别的事情。范围的末尾还可以释放自动存储的var,包括调用用户定义对象(类或结构)的dtor。
下面,块1(称为“使用自动促销”)展示了一种使用自动促销创建值“结果”中要求的字节顺序和cout的方法,供用户检查。
在块2(使用static_cast)中,实现相同的功能,并注意它恰好重新使用了名称为'result'的声明的自动变量。与第一个块auto var不会发生冲突,因为右大括号终止了块1的名称“结果”的范围。
第3块(使用我自己创建的静态强制转换函数)做同样的事情……第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;
}
可以通过控制内部自动变量的范围来捕获并释放自动存储器。甚至可以使用其他名称重复使用此内存。
代码块(用于较小的作用域)允许程序员以不同的方式使用自动内存。
函数“ sc”旨在减少键入。
// vvvvvvvv ---- formal parameter allows auto-promotion
uint64_t sc(uint64_t ui64) {
return static_cast<uint64_t>(ui64); // static cast
}