29得票6回答
为什么删除不完整的类型是未定义行为?

考虑以下经典例子,用于解释关于前置声明不应该做什么的内容: //in Handle.h file class Body; class Handle { public: Handle(); ~Handle() {delete impl_;} //.... ...

29得票3回答
删除不完整类型的对象

这个让我想了一下:class X; void foo(X* p) { delete p; } 如果我们甚至不知道X是否拥有可见的析构函数,那么我们怎么可能删除 p呢?g++ 4.5.1会给出三个警告:warning: possible problem detected in invo...

29得票6回答
前置声明和包含的区别

考虑以下两种情况(编辑只是为了完整问题并使其更清晰) 情况1:(如下所述,无法编译)//B.h #ifndef B_H #define B_H #include "B.h" class A; class B { A obj; public: ...

29得票6回答
在Lua中如何前向声明一个函数?

如何调用需要在其创建之前调用的函数?我读到了一些有关前向声明的内容,但在这种情况下谷歌并没有提供帮助。正确的语法是什么?

27得票4回答
模板:使用前置声明可以减少编译时间吗?

我需要处理一个包含许多模板类的库,这些类都被实现在头文件中。目前我正在尝试找到一种方法来减少编译时间,因为我必须在每个编译单元中包含整个库,导致编译时间过长。 即使是对于模板,使用前向声明是否也是一种可能性呢?我试图按照下面的示例进行操作,通过避免像 #include <vector&...

26得票2回答
是否可以在类内声明枚举类型?

我知道在C++11中可以通过提供存储类型来前向声明枚举类型,如: enum E : short; void foo(E e); .... enum E : short { VALUE_1, VALUE_2, .... } 但是我想在类中前向声明一个枚举类型,例如:...

26得票3回答
C/C++编译器如何在头文件中找到原型的定义?

当我在头文件中声明一个函数,并将该函数的定义放在另一个文件中时,编译器/链接器如何找到这个定义呢?它会系统地搜索路径中的每个文件吗?还是有更优雅的解决方案?这让我烦恼了几天,但我一直没有找到一个解释。

24得票3回答
Xcode 4上的语义警告

我在Xcode 4上收到语义警告: *声明的'struct sockaddr_in'将不会在此函数外可见* 该结构体似乎在netinet/in.h中声明 这个警告标记在Reachability.h上,它是我从Apple示例下载的一个类。#import <Foundation/Found...

24得票4回答
使用前向声明的默认模板参数

有没有可能在不指定或不知道这些参数的情况下前向声明使用默认参数的类? 例如,我想在Traits类中声明一个boost::ptr_list< TYPE >,而不是将整个Boost库拖入每个包含该特性的文件中。我想声明namespace boost { template<cla...

23得票3回答
未初始化的 C 字符串没有警告

我现在想知道为什么编译/链接一个小的C程序时,GCC没有报错。 我在version.h中声明了以下字符串:const char* const VERSION; 在version.c中,我已经设置了变量的初始化:const char* const VERSION = "0.8 rev 213"...