Dan*_*Dan 5 c++ g++ std visual-studio-2010
我有这个非常简单的代码;
#include <deque>
#include <vector>
using namespace std;
class A
{
public:
A(){};
~A(){};
deque<A> my_array; // vector<A> my_array;
};
int main(void)
{
}
Run Code Online (Sandbox Code Playgroud)
如果我在linux上使用g ++和icc/icpc编译此代码,它编译得很好,即使-Wall它没有发出警告.如果我将双端队列交换为向量,情况就是一样的.
我想在Windows上使用MSVCC(cl)构建此代码但不幸的是它抛出错误c2027:
error C2027: use of undefined type 'A'
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其更改std::deque为a,std::vector则可以使用Visual Studio 2010进行编译.
我的问题是; 这种行为是出于某种原因预期的吗?如果是这样,为什么编译器之间存在差异,或者这是g ++/icc还是MSVCC的错误?
Jam*_*nze 12
这是未定义的行为(无论是with std::deque还是with std::vector,因此无论实现如何处理它都很好,就标准而言.你正在实例化一个不完整类型的标准容器.
使用g ++进行编译时-Wall(通常,所有以逗号开头的选项-W)仅涉及语言.对于库问题,您也应该进行编译-D_GLIBCXX_CONCEPT_CHECKS -D_GLIBCXX_DEBUG
-D_GLIBCXX_DEBUG_PEDANTIC.(如果这会导致性能问题,则可以删除-D优化版本中的最后两个.)
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |