zoukankan      html  css  js  c++  java
  • C++ 临时变量的释放规则

    简介

    临时变量是在什么时候进行释放的呢?
    委员会将注意力集中到“语句结束位置”,很自然的,这种选择被通俗地称做 EOS (End Of Statement) 。问题是如何精确定义 EOS 的意义。
    测试程序

    #include "iostream"
    #include <string>
    using namespace std;
    
    int main(){
        string s1 = "111";
        string s2 = "222";
        char *q = nullptr;
        {
            const char *p = (s1 + s2).c_str();
            q = (char *)p;
        }
        printf("%s", q);
        printf("%s", (s1 + s2).c_str());
    }
    

    发现编译器有点智能关于 p 所指向的内存区域(临时变量)逻辑上会在大括号结束的时候就被释放,可能是因为我的q所指向这个区域,这个区域暂时没有得到释放。


    书中提到的例子,现在的编译器可以做到更智能。旧版本的C要求变量的定义一定要在开头,也是因为编译器不够智能,或者标准不够智能导致的问题。

    void f(String si, String s2void f(String si, String s2)
    {
    printf(" %s" ,sl+s2); // ok
    const char*
    printf( ” %s" ,p); // won’t work, temporary destroyed
    sl+s2;
    String s3
    printf(" %s" ,(const char*)s3); / / ok
    sl+s2
    cout << s3; / / ok
    cout << sl+s2; / / ok    
    }
    

    参考资料

    book C++的设计与演化

  • 相关阅读:
    java语言基础--标识符、关键字
    #考研碎碎念#3
    #考研笔记#计算机之word问题
    #考研#计算机文化知识1(局域网及网络互联)
    #学习笔记#jsp
    #学习笔记#JSP数据交互
    考研随笔2
    考研随笔1
    几个人
    全局变量
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14321085.html
Copyright © 2011-2022 走看看