【问题标题】:Is it possible to know the length of std::wostringstream before calling .str()?在调用 .str() 之前是否可以知道 std::wostringstream 的长度?
【发布时间】:2013-04-04 08:33:44
【问题描述】:

我正在研究 std::wostringstream 以及如何正确使用它。我想知道是否有任何方法可以事先知道构造字符串的长度?我尝试在 MSDN 和 http://en.cppreference.com/w/ 上搜索信息,最后在 google 上搜索,但找不到我要查找的内容。

例如,如果我将 wostringstream 的引用传递给函数,函数是否可以通过调用 .str()?

【问题讨论】:

    标签: c++ c++11 wostringstream


    【解决方案1】:

    您可以使用tellp() 成员函数,它返回相关流缓冲区的输出位置指示符。例如:

    #include <string>
    #include <sstream>
    #include <iostream>
    
    int main()
    {
        std::wostringstream oss;
        oss << L"Hello" << " World!" << std::endl;
        std::cout << oss.tellp();
    }
    

    这是live example。

    【讨论】:

    • 虽然这可能会奏效,但绝对不能保证。
    • @JamesKanze 你能详细说明为什么它不能保证工作吗?
    • @ChristianRau 我会问相反的问题:你为什么认为它应该工作。 wostream::tellp() 返回一个pos_type(这是一个类类型);这将转换为 streamoff (它是一个整数类型),但没有迹象表明涉及哪种映射,只要结果是一致的。 (当然,这里的标准要求很难理解,特别是因为它需要P(O(p)) == p,其中P 是pos_type,O 是streamoff,p 是一个实例P。当然,这显然是不可能的,因为P 需要保存更多信息。)
    猜你喜欢
    • 1970-01-01
    • 2012-12-19
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多