C++ 为什么seekg不';不能在通过引用传递的stringstream上工作?
我需要获取(I)stringstream/ifstream大小。我在更多地方使用该代码,因此我为其编写了一个函数。该函数将istream&作为一个参数(因此它更通用)。代码在流的末尾使用seekg,如下所示: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:
#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()/<代码>的结果中,你不能做.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