相关疑难解决方法(0)

C++中临时的保证寿命?

C++是否为在函数调用中创建但未用作参数的临时变量的生命周期提供保证?这是一个示例类:

class StringBuffer
{
public:
    StringBuffer(std::string & str) : m_str(str)
    {
        m_buffer.push_back(0);
    }
    ~StringBuffer()
    {
        m_str = &m_buffer[0];
    }
    char * Size(int maxlength)
    {
        m_buffer.resize(maxlength + 1, 0);
        return &m_buffer[0];
    }
private:
    std::string & m_str;
    std::vector<char> m_buffer;
};
Run Code Online (Sandbox Code Playgroud)

以下是您将如何使用它:

// this is from a crusty old API that can't be changed
void GetString(char * str, int maxlength);

std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
Run Code Online (Sandbox Code Playgroud)

什么时候会调用临时StringBuffer对象的析构函数?是吗:

  • 在调用GetString之前?
  • GetString返回后?
  • 编译器依赖?

我知道C++保证本地临时变量只要有引用就有效 - 当引用成员变量时,它是否适用于父对象?

谢谢.

c++

95
推荐指数
2
解决办法
2万
查看次数

const char*和literal string之间有什么区别?

我正在处理一个有QT小部件的表单,我必须在QTextEdit字段中设置一些值.我不得不调用一个声明为的函数:

 void SDB::setDescription(const char *Description);
Run Code Online (Sandbox Code Playgroud)

当我用这种方法称呼它时(i)

const char * desc = saveOptionsDesLineEditBox->text().toStdString().c_str();
SDB::setDescription(desc);
Run Code Online (Sandbox Code Playgroud)

它在窗口小部件的文本框中显示无法识别的符号.但通过第二种方法调用(ii)

SDB::setDescription(saveOptionsDesLineEditBox->text().toStdString().c_str());
Run Code Online (Sandbox Code Playgroud)

工作良好.为什么这两种方法有区别?

c++ qt

4
推荐指数
1
解决办法
586
查看次数

标签 统计

c++ ×2

qt ×1