相关疑难解决方法(0)

什么时候应该在C++中使用类vs结构?

在什么情况下在C++中使用structvs a 更好class

c++ oop struct ooad class

895
推荐指数
15
解决办法
38万
查看次数

混合类和结构

我很清楚类和结构之间区别,但是我很难权威地说这是否定义得很好:

// declare foo (struct)
struct foo;

// define foo (class)
class foo {
};

// instance of foo, claiming to be a struct again! Well defined?
struct foo bar;

// mixing class and struct like this upsets at least one compiler (names are mangled differently)
const foo& test() {
   return bar;
}

int main() {
   test();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果这是未定义的行为,有人可以指向权威(即ISO的章节和经文)参考的方向吗?

处理这个问题的编译器(Carbide 2.7)相对较旧,我尝试过的所有其他编译器对此都非常满意,但显然没有任何证据.

我的直觉是这应该是未定义的行为,但我找不到任何证实这一点,我很惊讶没有GCC版本或Comeau这么多警告它.

c++ struct class undefined-behavior

17
推荐指数
2
解决办法
2951
查看次数

将声明转发为struct vs class

我在类的C++前向声明中发现了一个错误,它被错误地声明为struct Book而不是class Book.我认为Book曾经是一个结构,变成了一个类,但前向声明仍然存在.

Book.h:

class Book {
    ...
};
Run Code Online (Sandbox Code Playgroud)

Library.h:

struct Book;

class Library {
    std::vector<Book*> books;
};
Run Code Online (Sandbox Code Playgroud)

没有编译器警告,结果程序似乎工作正常.这让我很好奇:理论上,这会不会引起问题?它只是一个指针,是的,但是,例如,如果类有虚方法,多继承,指针可能不同吗?

我知道关于默认公共/私有的类/结构之间的区别,但我特别询问前向声明和交换它们的可能后果.

c++ struct forward-declaration

16
推荐指数
1
解决办法
5918
查看次数

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

在C ++中声明类指针变量时,何时以及为什么我们应该使用'struct'关键字?

我已经在嵌入式环境中看到了这一点,所以我怀疑这是C的一种保留。我已经看到了很多有关在声明struct对象时何时使用'struct'关键字的解释,因为它与C中的名称空间相关(在这里),但是我找不到任何人在谈论为什么在声明类指针变量时可能会使用它。

例如,在CFoo.h中:

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

inline Foo::doStuff()
{
    return 7;
}
Run Code Online (Sandbox Code Playgroud)

后来在另一个类中:

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

    // Go on to do something interesting with pCFoo...
}
Run Code Online (Sandbox Code Playgroud)

c++ variables scope class elaboration

2
推荐指数
2
解决办法
118
查看次数