gpt4 book ai didi

c++ - Windows 上的 Clang/LLVM 6.0.0 不需要静态数据成员声明的定义

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:53 25 4
gpt4 key购买 nike

Clang/LLVM 6.0.0 要求定义静态数据成员声明。看下面的小程序:

// main.cpp

#include <iostream>

struct A
{
void f()
{
std::cout << "bla";
}
};

struct S
{
static A a; // declaration, not definition
};

int main()
{
S::a.f();
}

此代码编译成功(使用 -Xclang -std=c++17 -Xclang -flto -Xclang -O3)并输出“bla”。但是没有 S::a 的定义。

相比之下,MSVC 不编译并提示未解析的外部符号 S::a。

现在这是 Clang/LLVM 中的错误,对吧?

最佳答案

basic.def.odr

每个程序都应该只包含一个非内联函数或变量的定义,该函数或变量在该程序中被丢弃的语句之外使用; 无需诊断

关于c++ - Windows 上的 Clang/LLVM 6.0.0 不需要静态数据成员声明的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50981936/

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