我们使用Visual Studio 2003(VC71)进行编译.为了减少编译时间,我们更改了构建脚本,以便为每个CPP文件生成预编译头文件(.pch).
makefile中使用的选项:
/Yc"StdAfx.h"
/Fp"StdAfx.pch"
Run Code Online (Sandbox Code Playgroud)
这样,目标的编译时间减少了30%.但是,任何人都可以帮助我理解即使每次编译每个CPP文件时生成pch文件,它如何减少编译时间.
还有,这是正确的方法吗?我们应该使用Yc和Yu组合吗?我不能使用/ Yu选项,因为pch文件应该至少生成一次.
我相信在C++中,处理重新分配的更好方法是使用STL向量,因为它保证了连续的存储位置.
我有几个问题要理解其中的区别:
谢谢,
我正在尝试为给定的用例为我的类定义一个常量BUFFER_LENGTH.
//1. Using preprocessor declaration
//#define BUFFER_LENGTH 12
//2.Global constant
//const int BUFFER_LENGTH = 12;
class MyRequest
{
public:
//3. Define an in-class constant
//static const int BUFFER_LENGTH = 12;
//4. Declare an enum constant
enum
{
BUFFER_LENGTH = 12
};
MyRequest()
{
strcpy(mBuffer, "TestString");
printf("Buffer: %s, BUFFER_LENGTH = %d",mBuffer, BUFFER_LENGTH);
}
private:
char mBuffer[BUFFER_LENGTH];
};
Run Code Online (Sandbox Code Playgroud)
我刚刚列出了可以为类定义常量的不同方法.
1. Using Preprocessor constant
2. Using Global constant
3. Using in-class constant
4. using an enum.
Run Code Online (Sandbox Code Playgroud)
其中,哪个是定义给定用例的常量的最佳方法?我更喜欢使用枚举常量而非其他方法.有没有其他更好的方法,我错过了.
谢谢,
最近我面临着指向VC6编译器的问题.
其中很少是:
以下示例未使用VC6编译器进行编译.它说"错误C2562:'()':'void'函数返回一个值".看起来VC6不喜欢将void函数传递给for_each.
class Temp
{
public:
Temp(int i):m_ii(i)
{}
int getI() const
{
return m_ii;
}
void printWithVoid()
{
cout<< "i = "<<m_ii<<endl;
}
bool printWithBool()
{
cout<< "i = "<<m_ii<<endl;
return true;
}
private:
int m_ii;
};
int main(void)
{
std::vector<Temp> arrTempObjects;
arrTempObjects.push_back(Temp(0));
arrTempObjects.push_back(Temp(2));
//Doesnot work, compiler error
std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithVoid));
//Works
std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithBool));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您是否遇到过与VC6.0相关的任何其他问题.解决这些问题的任何解决方法?还是时候改变编译器了?
是否有任何Win32 API将机器置于休眠或挂起模式?
我读了MSDN,发现WM_POWERBROADCAST当电源管理事件发生时,消息会被广播.我想到了同样的模拟PostMessage(WM_POWERBROADCAST).这是正确的做法还是存在任何Win32 API来实现这一目标?
我想要一个函数,它将获取一个文件并持续多少天,如果它比那个日期更早,将返回0否则1 ...这样的东西......
例如:
int IsOlder(TCHAR *filename, int days)
{
do operation.
If last modify date was older than days variable
return 0
else
return 1
}
Run Code Online (Sandbox Code Playgroud)
这是适用于Windows的MS VC++ 6.谢谢你们!
在我的项目中,我找到了一段代码,其中一个方法在构造函数的初始化列表中被调用.
Test2(Test* pTest):m_pTest(pTest), m_nDuplicateID(pTest->getTestID())
{
}
Run Code Online (Sandbox Code Playgroud)
我发现Test2的用户可能会将NULL传递给构造函数.由于指针在未经验证的情况下使用,因此存在访问冲突的可能性.
这引发了我在构造函数的初始化列表中查看异常处理.我在其中一篇文章中发现尝试可以在初始化列表中使用.我写了一个小测试程序来测试这个概念:
//Test class stores the unique ID and returns the same with API getTestID
class Test
{
public:
Test(int nID):m_nID(nID){
}
int getTestID() const
{
return m_nID;
}
private:
int m_nID;
};
class Test2
{
public:
Test2(Test* pTest)
try :m_pTest(pTest), m_nDuplicateID(pTest->getTestID())
{
}
catch (...)
{
cout<<"exception cought "<< endl;
}
void printDupID()
{
cout<<"Duplicate ID" << m_nDuplicateID << endl;
}
private:
Test* m_pTest;
int m_nDuplicateID;
};
int main(int argc, char* argv[])
{ …Run Code Online (Sandbox Code Playgroud) 看起来像个愚蠢的问题.但是,我的评论答案的SO问题让我重新思考一个.
[评论说,空载体的容量不必为零]
默认情况下,我的答案是0,因为矢量中没有元素.将容量保持为0是有意义的,并且在第一次分配时可以增加容量而不会有任何性能命中.
但标准并没有说明这一点.(我也查阅了Josuttis的书).
它纯粹是针对具体实现的吗?是否有任何STL供应商使用一些任意数字作为空载体的capcity?
有什么想法吗...
我最近在我的代码库中看到了下面的代码(下面给出的简化版本)并且有疑问:
class B;
class A
{
public:
A():m_A("testA"){}
B& getB()
{
return m_B;
}
B* getBPtr() //== > written to explain the problem clearly
{
return &m_B;
}
private:
B m_B;
};
class B
{
public:
B(const std::string& name):m_Name(name){}
std::string getName() const
{
return m_Name;
}
private:
std::string m_Name;
};
class C
{
public:
void testFunc(B* ptr)
{
}
};
int main()
{
A a;
C c;
c.testFunc(&a.getB()); ===> is it equivalent to c.testFunc(a.getBPtr()) ?
}
Run Code Online (Sandbox Code Playgroud)
我有一个奇怪的问题.我有以下代码:
template<clss index, class policy>
inline int CBase<index,policy>::func(const A& test_in, int* srcPtr ,int* dstPtr)
{
int width = test_in.width();
int height = test_in.height();
double d = 0.0; //here is the problem
for(int y = 0; y < height; y++)
{
//Pointer initializations
//multiplication involving y
//ex: int z = someBigNumber*y + someOtherBigNumber;
for(int x = 0; x < width; x++)
{
//multiplication involving x
//ex: int z = someBigNumber*x + someOtherBigNumber;
if(soemCondition)
{
// floating point calculations
}
*dstPtr++ = …Run Code Online (Sandbox Code Playgroud)