函数或代码中间的代码块

时间:2019-03-09 04:23:26

标签: c++ c++11

在函数或程序中间放置代码块的意义和意义如下

#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;

}

4 个答案:

答案 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
}