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

无意中发现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 的优先级并不重要。

希望它清晰且令人信服。

https://stackoverflow.com/questions/5388097/

相关文章:

c++ - 析构函数可以是最终的吗?

c++ - 编译lua代码,存储字节码然后加载并执行

c++ - 与 win32 CRITICAL_SECTION 相比的 std::mutex 性能

c++ - 如何在 Windows 上找到 Qt5 CMake 模块

c++ - 如何使用 C++ 模板减少编译时间

c++ - vector 的 std::remove 和删除之间的区别?

c++ - 什么是 decltype 以及它是如何使用的?

c++ - "&s[0]"是否指向 std::string 中的连续字符?

c++ - C++ 标准是否对 float 的表示做了任何规定?

c++ - 三元表达式中的逗号混淆