当前位置: 首页 > 知识库问答 >
问题:

为什么GCC不允许我创建内联静态std::stringstream?

琴献
2023-03-14

我会直接去MCVE:

#include <sstream>

struct A
{
    inline static std::stringstream ss;
};

GCC 7.2和7.1拒绝编译,错误如下:

error: no matching function for call to 'std::__cxx11::basic_stringstream::basic_stringstream()'
     inline static std::stringstream ss;
                                     ^~
In file included from blah:1:0:
/opt/compiler-explorer/gcc-7.2.0/include/c++/7.2.0/sstream:723:7: note: candidate: std::__cxx11::basic_stringstream::basic_stringstream(std::__cxx11::basic_stringstream&&) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]
       basic_stringstream(basic_stringstream&& __rhs)
       ^~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-7.2.0/include/c++/7.2.0/sstream:723:7: note:   candidate expects 1 argument, 0 provided

您可以在没有任何标志的情况下复制,也可以使用-std=c 17

Clang 5.0编译它时没有任何问题。

其他类(例如std::string)可以毫无问题地成为内联静态类。

使其成为非内联静态会删除错误。

这不是GCC错误还是我遗漏了什么?


共有1个答案

殷建弼
2023-03-14

错误。简化为:

struct C { explicit C() {} };
struct A {
    inline static C c;
};

GCC初始化处理代码中的某些地方错误地将其视为忽略显式默认构造函数的副本初始化上下文。。

 类似资料:
  • 问题内容: 为什么无法覆盖静态方法? 如果可能,请使用示例。 问题答案: 覆盖取决于拥有类的实例。多态性的重点是可以对一个类进行子类化,并且实现那些子类的对象对于在超类中定义的相同方法(在子类中被重写)将具有不同的行为。静态方法未与类的任何实例相关联,因此该概念不适用。 影响Java设计的因素有两个。一个是对性能的关注:Smalltalk批评它太慢(垃圾回收和多态调用是其中的一部分),Java的创

  • 在过去的几天里,我一直在和Spring保安公司战斗,所以我希望有人能在这里帮助我。 我正在使用Spring Boot 1.2.5 我使用的是Spring Actuator和Spring Remote Shell,它们已经从类路径中删除,认为它们可能会引起问题 我排除了SecurityAutoConfigsion,因为它可能会导致我的问题 这是我的主要课程 这是我的安全配置 我的问题/问题是 > C

  • 问题内容: 在PHP 5.2中启用严格警告之后,我看到了一个项目中的大量严格标准警告,这些项目最初编写时没有严格警告: 严格标准 : 静态函数 Program :: getSelectSQL()在Program.class.inc中 不应抽象 有问题的函数属于抽象父类Program,并且被声明为抽象静态,因为它应该在其子类(例如TVProgram)中实现。 我确实在这里找到有关此更改的参考: 删除

  • 根据JLS: 内部类是不是显式或隐式声明为静态的嵌套类。内部类不能声明静态初始值设定项或成员接口。 但我下面的代码编译成功。 有人能帮我理解这种行为吗

  • 问题内容: 假设我们有如下代码。 我知道要实例化 非静态内部类 的 对象,需要外部 类 的 对象 。表示与类相关,并且访问该类不需要实例化。非静态内部类仅可在实例化外部类的对象后使用。包含任何静态引用可能没有意义。 我的问题: 没有外部类的任何显式对象,可以加载非静态内部类吗? 为什么 允许在 非静态内部类* 中将 编译时间常数 (字符串文字,在字符串池和原始类型中以特殊方式处理)设为 静态 ?

  • 我遇到了下面的Java代码,起初看起来不错,但从未编译过: 下面是IDE :变量USER_ID可能已分配的错误消息。 将值赋值给静态最终变量有问题吗?