【问题标题】:How to reuse a string variable in c++如何在 C++ 中重用字符串变量
【发布时间】:2009-05-18 09:42:59
【问题描述】:

这是正确的,它可以正常工作

string str("in.dat");
ifstream fin(str.c_str(), ios::binary | ios::ate );
.
.
.
//Do I need to clear the string before assigning new name???
str = "out.dat";
ofstream fout(str.c_str(), ios::binary); //seems to work

问候

【问题讨论】:

    标签: c++ string


    【解决方案1】:

    其他人说的都是真的。但是,在您发布的代码中,您也可以说:

    ifstream fin( "in.dat", ios::binary | ios::ate );
    ofstream fout( "out.dat", ios::binary ); 
    

    【讨论】:

    • 我可能会添加它是首选。从代码阅读的角度来看。
    • 取决于他是否在他未发布的代码中将该名称用于其他内容(如错误消息)。我只是想让他知道他并不总是必须使用 s.c_str()。
    【解决方案2】:

    你所做的是正确的。 = 运算符将覆盖字符串内容,这是重用字符串变量的正常情况。它甚至可能不会重新分配任何缓冲区,而是重用现有的。

    【讨论】:

      【解决方案3】:

      这样做是正确的。 在任何语言中,赋值都意味着对象失去其旧值并获得新值

      【讨论】:

        【解决方案4】:

        不,只需分配一个新值即可。字符串类有责任确保分配有效,不会引入泄漏。

        【讨论】:

          【解决方案5】:

          虽然它是有效的 C++,但它不是非常nice C++。

          您的代码的读者需要记住,str 变量是可变的,并且在整个代码文件中用于不同的目的。当在 str 的第二个赋值之间插入代码并将其用作文件名时,读者可能会发现很难找出变量中的内容。

          给你的变量起一个合理的名字总是更好的;然后它几乎总是变得恒定。

          const char* inputpath("in.dat");
          ifstream inputstream( inputpath, ... );
          
          const char* outputpath("out.dat");
          ... lots of code
          ofstream outputstream( outputpath, ... );
          

          【讨论】:

          • 文件流构造函数将 const char * 作为第一个参数,而不是 std:;string。
          猜你喜欢
          • 2018-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-03
          • 2021-09-16
          • 2018-12-01
          相关资源
          最近更新 更多