c++ - 什么是 C++ 内联类?

标签 c++ class inline clang

无意中发现Clang编译器允许:

inline class AAA
{
};

在 C++ 中。 这是什么?


PS。我将此报告给 Clang 邮件列表 cfe-dev@cs.uiuc.edu,现在等待回复。我会在收到通知后更新这个问题。

最佳答案

如果您希望声明一个在类声明之后直接返回该类对象的函数,则允许这样做,例如:

#include <iostream>

inline class AAA 
{
public:
    AAA()
    {
        // Nothing
    }

    AAA(const AAA& _Param)
    {
        std::cout << "Calling Copy Constructor of AAA\n";
    }
}A()
 {
     AAA a;
     return a;
 };

int main()
{
    A();
    return 0;
}

您还应注意在其他非法情况下出现的编译器错误(或警告),例如声明变量而不是 A(),还应注意编译器声明它忽略了 inline 关键字,如果你没有声明任何函数。

希望对您有所帮助。

编辑:Eonil 的评论

如果您在问题中谈论上面的代码,那么它与我看到的情况相同,编译器会给您一个警告:'inline':当没有变量时,'AAA' 左侧被忽略声明

但是,如果您使用我的答案中的代码,但将 A() 替换为变量,例如 B,则会产生编译器错误: 'B' : 数据声明中不允许使用'inline'

所以我们发现编译器接受这样的声明没有错误,尝试自己编写inline double;怎么样?它将产生一个警告:'inline': 当没有声明变量时,'double' 左侧被忽略

现在这个声明怎么样:

double inline d()
{
}

它没有给出警告或错误,它与:

inline double d()
{
}

因为inline 的优先级根本不重要。

第一个代码(在整个答案中)类似于写作:

class AAA
{
    // Code
};

inline class AAA A()
{
    // Code
}

这是合法的。

另外,也可以写成:

class AAA
{
    // Code
};

class AAA inline A()
{
    // Code
}

如果你看到第一个代码(在整个答案中)写成这样,你会松一口气:

#include <iostream>

class AAA 
{
    // Code
} inline A()
 {
    // Code
 };

但它们是相同的,因为 inline 的优先级并不重要。

希望它清晰且令人信服。

关于c++ - 什么是 C++ 内联类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5388097/

相关文章:

c++ - 使用参数从 c++ 调用 v8 javascript 函数

html - Bootstrap响应式导航栏问题

python - 当您从 Python 中的模块而不是类继承时会发生什么?

java - 无法编译个人客户类,构造函数有问题吗?

c++ - C++ 中对象实例化的方法访问

c++ - 让两个 dll 共享一个静态库的陷阱是什么?

java - 使用 hockeyapp 的 cocos2dx 中的 C++ 崩溃报告

c++ - Visual Studio C++ 能够编译并出现编译错误(红色下划线)

css - 将一行内联图像居中

html - 如何在不使用不良做法的情况下内联 H2 和 HR 标签?