c++ - 为什么在 C++ 类指针声明中使用 'struct' 关键字

标签 c++ class variables scope elaboration

在 C++ 中声明类指针变量时,何时以及为什么要使用“struct”关键字?

我在嵌入式环境中看到过这种情况,所以我怀疑这是 C 的某种保留。我已经看到很多关于在声明与以下内容相关的结构对象时何时使用“struct”关键字的解释C 中的命名空间(here),但我找不到任何人谈论为什么在声明类指针变量时可能会使用它。

例如,在 CFoo.h 中:

class CFoo
{
public:
    int doStuff();
};

inline Foo::doStuff()
{
    return 7;
}

然后在不同的类(class):

void CBar::interesting()
{
    struct CFoo *pCFoo;

    // Go on to do something interesting with pCFoo...
}

最佳答案

很少有这样做的理由:它是 C 的失败,在这种情况下,程序员只是多愁善感——也许是为了提高可读性。也就是说,它可以用来代替前向声明。

在某些情况下,您可能需要消除歧义,但此处并非如此。一个需要消除歧义的例子是

class foo{};

int main()
{
    int foo;
    class foo* pf1;
    struct foo* pf2;
}

请注意,您可以互换使用classstruct。您也可以使用 typename,这在使用模板时非常重要。以下是有效的 C++:

class foo{};

int main()
{    
    class foo* pf1;
    struct foo* pf2;
    typename foo* pf3;
}

关于c++ - 为什么在 C++ 类指针声明中使用 'struct' 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57592945/

相关文章:

ios - 从初始化程序返回而不初始化所有存储的属性

java - 在另一个类中调用一个类的变量

javascript - 是否可以使用函数输入来创建变量名?

c++ - 通过 fread 将 jpg/png 读入点数组

c++ - 使用 QtConcurrent::run 在单独的线程上连接信号/插槽

c++ - Intel Inspector XE 2012 警告 #12367 - 传递给 vector::erase() 的迭代器参数切片

c++ - C++14 中的依赖限定名查找

java - 无论如何,有没有将 mysql 表转换为 Java 类

google-chrome - 将变量从后台传递到 Chrome 扩展程序上的弹出窗口

java图形变量给出错误的值