我希望char,short和int类型的宽度为1,2和4字节.我在我的源代码中包含了一个stdint.h标题.这是否保证int8_t,int16_t和int32_t整数类型的宽度是指定的?实现这一目标的最佳方法是什么?
我听说某些 64 位系统上有 16 位长字符类型。Intel 64 (EM64T) 系统上的 char 类型的大小是多少?
我开发了一个自定义的visual basic 6控件并声明了一些自定义事件.是否有可能在vb6中从模块中引发这些事件,或者我需要在我的控件中实现一个特殊的"代理"方法来执行此操作?
我有一个数学矢量类,其设计如下:
class Vector3D {
public:
float x;
float y;
float z;
public:
Vector3D() {}
Vector3D(float xx, float yy, float zz = 0.0) { x=xx; y=yy; z=zz; }
Vector3D(const float v[]) { x=v[0]; y=v[1]; z=v[2]; }
Vector3D(const Vector3D& v) { x=v.x; y=v.y; z=v.z; }
// math member methods
// ...
};
Run Code Online (Sandbox Code Playgroud)
我曾经使用以下方法在堆栈上创建一个Vector3D类型的变量:
Vector3D vec1 = Vector3D(1.0, 1.0, 1.0);
Run Code Online (Sandbox Code Playgroud)
我听说可以通过实现初始化列表构造函数来缩短C++ 0x,因此可以编写如下内容:
Vector3D vec1 = { 1.0, 1.0, 1.0 };
Run Code Online (Sandbox Code Playgroud)
实现这个的正确方法是什么?
花括号的语法真的很适合这个类!感谢您的回答和评论!
此外,我做了一些综合性能测试,试图测量构造函数初始化列表是否在构造函数中提供了成员变量赋值的加速.以下是我用g ++ 4.6.1得到的结果:
原样(构造函数和自定义复制构造函数中的成员赋值):
Median: 634860 ns
Median, CPI: 15.8715 …Run Code Online (Sandbox Code Playgroud)PIMPL Idiom是一种实现隐藏的技术,其中公共类包装公共类所属的库外部无法看到的结构或类.这会隐藏来自库用户的内部实现细节和数据.
但是可以实现相同的参考使用吗?
MCanvasFont.h
namespace Impl {
class FontDelegate;
}
class MCanvasFont
{
public:
MCanvasFont();
virtual ~MCanvasFont();
protected:
// Reference count
long m_cRef;
// agg font delegate
const Impl::FontDelegate& m_font;
}
Run Code Online (Sandbox Code Playgroud)
MCanvasFont.cpp
// helpers
#include "ImplHelpers/FontDelegate.h"
MCanvasFont::MCanvasFont()
: m_cRef(1),
m_font(Impl::FontDelegate() )
{
// constructor's body
}
Run Code Online (Sandbox Code Playgroud)
PS此代码编译时没有任何G ++问题.
何时创建并销毁特定C++类的静态成员?假设我已经定义了一个WinVersion类:
WinVersion.h
class WinVersion {
public:
// static methods
static WinVersion& Get();
static bool Is_NT();
// singleton
static WinVersion m_version;
// constructor
WinVersion();
private:
unsigned short m_PlatformId;
unsigned short m_MajorVersion;
unsigned short m_MinorVersion;
unsigned short m_BuildNumber;
};
Run Code Online (Sandbox Code Playgroud)
WinVersion.cpp:
// static members
WinVersion WinVersion::m_version = WinVersion(); // unsure if it's good enough
// static functions
WinVersion& WinVersion::Get() {
return m_version;
}
bool WinVersion::Is_NT() {
return (m_version.m_PlatformId == VER_PLATFORM_WIN32_NT);
}
// constructor
WinVersion::WinVersion()
{
OSVERSIONINFO osinfo;
osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
... …Run Code Online (Sandbox Code Playgroud) 我开发了一个基于C++的COM对象,以便在VB6应用程序中使用它.现在我需要添加一些日志来捕获一些bug.我从"如何在Visual Studio 6.0中调试COM对象"的问题中找到了我可以使用该OutputDebugString函数的问题.但是有可能以某种方式写入VB6立即窗口吗?