小编lez*_*lon的帖子

如何在我的程序中的几个文件中共享结构?

这是我的问题:我有一个大的main.c文件,在我的程序中包含40个左右的"全局"结构(它们在文件的开头声明),我在main.c文件中也有几个函数,我能够直接读取和写入这些结构,因为它们是全局的.现在我正在尝试将我原来的main.c文件的几个函数移动到另一个.c文件中,该文件只包含与我程序的特定部分相关的函数.但是我当然不能直接从我的新.c文件中访问main.c全局变量.有没有解决的办法?我想避免通过指针传递每个结构,因为这会得到可怕的函数原型.谢谢

c

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

C++ - 根据上下文实例化派生类

假设我有200个名为class1,class2等的类,派生自类,以及1到200之间的整数.有没有办法根据我的整数值明确地实现一个派生类?显然我可以手动检查每个值,但我想知道C++中有什么更灵活的东西

c++

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

在堆上放置大对象是不是很糟糕?

将大对象存储在堆上而不是堆栈中会产生什么后果(如果有的话)?我记得读过最好在堆栈上放置更大的对象来限制堆碎片......这是真的吗?谢谢

编辑:问题来自我正在制作的游戏,我的基本对象将有关于纹理,实体等的所有信息很可能在堆上创建,我真的不知道它的大小,我们可以假设像300 MB的东西

c++

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

这是Visual 2010的编译错误吗?

class Base {
public:
    virtual void myFunc(double a, double b) { };
    virtual void myFunc(double a) { };

};

class Derived : public Base {
public:
    virtual void myFunc(double a) { return this->myFunc(a, 0.0); };
};                                      // ^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

以前的代码将无法编译:error C2660: 'Derived::myFunc' : function does not take 2 arguments 显然,编译器无法看到我正在尝试调用Base类中定义的函数,或者任何覆盖它的函数.另一方面,以下代码编译好了:

class Base {
public:
    virtual void myFunc2(double a, double b) { };
    virtual void myFunc(double a) { };

};

class Derived : public Base {
public:
    virtual void myFunc(double a) …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2010 visual-studio-2008 visual-c++

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

这种引用的使用不正确吗?

我有以下代码:

std::vector<A>& Get() { return some_object; };

for(int i=0; i<Get().size(); ++i) {
    x->push_back(Get()[i]);
}
Run Code Online (Sandbox Code Playgroud)

但是当我第一次调用size()时,我得到了垃圾值.我想某些临时的东西会被删除,但我不确定...有人能告诉我发生了什么吗?

编辑:我some_object是一个静态向量,所以在这个例子中它永远不会被删除

c++ reference temporary

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

这种未定义的行为?

我在代码库中找到了以下代码.我的同事认为这没关系,但看起来像UB一样可疑.是不是UB?

class A {
   //some stuff
};

class B : public A {
   int a;
   int b;
   int c;
}

void foo( std::vector<A>& a ) {

   std::vector<B> b;
   for(size_t i = 0 ; i < a.size(); ++i ){
      b.push_back( *(B*)(&a[i]) );
   }

   //remove some elements from b

   for(size_t i = 0 ; i < b.size(); ++i ){
      a.push_back( *(A*)(&b[i]) );
   }

}
Run Code Online (Sandbox Code Playgroud)

c++ undefined-behavior

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

如果(a)或if(a!= NULL)哪个更好

如果a是一个指针,测试if(a)和if(a!= NULL)之间是否存在差异?哪一个更好?

c++

0
推荐指数
1
解决办法
176
查看次数