gpt4 book ai didi

c++ - 没有成员使用gcc和clang在 'str'中名为 'std::basic_ostream'的成员,但是msvc没问题

转载 作者:行者123 更新时间:2023-12-03 08:29:22 45 4
gpt4 key购买 nike

此代码段(https://gcc.godbolt.org/z/hKDMxm):

#include <iostream>
#include <sstream>

using namespace std;

int main() {
auto s = (ostringstream{} << "string").str();
cout << s;
return 0;
}

可以使用msvc进行编译和运行,但是无法使用clang 9.0.0和gcc 9.2进行编译,并显示以下错误消息: no member named 'str' in 'std::basic_ostream<char>'。看 https://en.cppreference.com/w/cpp/io/basic_ostringstream/str,很明显 str()ostringstream成员。为什么clang和gcc无法编译此代码?

最佳答案

there is clearly str() member of ostringstream



是的,但是根据 cppreference<<的此重载应返回对 basic_ostream<...>的引用,而不是 ostringstream

libstdc++(GCC的标准库)正是这样做的,而libc++(Clang的标准库)和MSVC的标准库在技术上在这里表现不正确。

但是,似乎有一个打开的 defect report暗示与rvalue流一起工作的 <<重载应返回传递给它的确切流类型。如果被接受,您的代码将是有效的。

关于c++ - 没有成员使用gcc和clang在 'str'中名为 'std::basic_ostream<char>'的成员,但是msvc没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59473325/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com