Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么seekg不';不能在通过引用传递的stringstream上工作?_C++_C++11_Visual Studio 2017_C++14 - Fatal编程技术网

C++ 为什么seekg不';不能在通过引用传递的stringstream上工作?

C++ 为什么seekg不';不能在通过引用传递的stringstream上工作?,c++,c++11,visual-studio-2017,c++14,C++,C++11,Visual Studio 2017,C++14,我需要获取(I)stringstream/ifstream大小。我在更多地方使用该代码,因此我为其编写了一个函数。该函数将istream&作为一个参数(因此它更通用)。代码在流的末尾使用seekg,如下所示: #include <iostream> #include <sstream> #include <fstream> std::streamsize getStreamSize(std::istream& is) { const std:

我需要获取(I)stringstream/ifstream大小。我在更多地方使用该代码,因此我为其编写了一个函数。该函数将istream&作为一个参数(因此它更通用)。代码在流的末尾使用seekg,如下所示:

#include <iostream>
#include <sstream>
#include <fstream>

std::streamsize getStreamSize(std::istream& is) {
    const std::streampos currentPos{ is.tellg() };
    const std::streamsize size{ is.seekg(0, std::ios::end).tellg().seekpos() };
    is.seekg(currentPos);

    return size;
};

int main()
{
    using namespace std;
    string s{ "some string" };
    cout << "string: " << s << endl;

    istringstream ss{ s };

    istream& is{ ss };
    streampos size{ is.seekg(0, ios::end).tellg() };
    cout << "stream size: " << size << endl;

    cout << "stream size reference: " << getStreamSize(is) << endl;

    cout << "stream size reference: " << getStreamSize(ss) << endl;


    ifstream ifs{ "some_file_path.txt" };
    cout << "file stream size: " << getStreamSize(ifs) << endl;

    return 0;
}
为什么不可能获得通过引用传递的(i)stringstream大小,但可以获得通过引用传递的本地引用或ifstream的i(stringstream)大小


Windows 10,SDK版本100.1629,VisualStudio社区154.2

<代码> TELG.():SekPosior()/Case>是我的知识过时,还是微软ISM?在标准C++的<>代码> Telgg()/<代码>的结果中,你不能做> SekPosior(<)>代码>。(tellg的结果是实现定义的)删除了
.seekpos()
(尽管我没有使用MSVC),您的代码对我来说运行正常哇,真是个愚蠢的错误。谢谢!即使在C++中,我也没有使用SekPoS调用。<代码> TELG.()。(tellg的结果是实现定义的)删除了
.seekpos()
(尽管我没有使用MSVC),您的代码对我来说运行正常哇,真是个愚蠢的错误。谢谢!即使在大多数情况下,我也没有使用seekpos调用。
string: some string
stream size: 11
stream size reference: 0
stream size reference: 0
file stream size: 6021120