小编Dav*_*fal的帖子

在构造函数中调用虚函数

假设我有两个C++类:

class A
{
public:
  A() { fn(); }

  virtual void fn() { _n = 1; }
  int getn() { return _n; }

protected:
  int _n;
};

class B : public A
{
public:
  B() : A() {}

  virtual void fn() { _n = 2; }
};
Run Code Online (Sandbox Code Playgroud)

如果我写下面的代码:

int main()
{
  B b;
  int n = b.getn();
}
Run Code Online (Sandbox Code Playgroud)

人们可能期望将n其设置为2.

事实证明,n设置为1.为什么?

c++ constructor overriding virtual-functions

220
推荐指数
6
解决办法
9万
查看次数

用C++表示128位数字

在C++中表示128位数的最佳方法是什么?它应该尽可能地与内置数值类型一致(即支持所有算术运算符等).

我正在考虑构建一个具有2个64位或4个32位数的类.或者可能只是创建一个128位的内存块并自己完成所有操作.

是否有一些更容易/更标准的方式,或者我自己实施它时不太可能搞砸的东西?:)

如果它可以扩展到256位,512位等等也会很好...

c++ math

55
推荐指数
6
解决办法
7万
查看次数

在Xcode中禁用特定行中的特定警告

我正在针对Base 4.0 SDK编写iPhone应用程序,但我的目标是OS 3.1.3,因此OS 3用户可以使用该应用程序.

我打电话:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
Run Code Online (Sandbox Code Playgroud)

在iOS 4.0中已弃用.我知道这一点,如果我们在iOS 4.0或更高版本下运行,我们已采取措施调用较新的"withAnimation"版本.

但是,我收到一条警告,我正在调用一个已弃用的SDK.

我想在这个特定的地方禁用此特定警告.我想要所有其他警告(包括其他位置的相同弃用警告)

这可以在Xcode中实现吗?

iphone xcode warnings suppress-warnings

27
推荐指数
3
解决办法
1万
查看次数

从Visual Sourcesafe迁移到Mercurial

将Visual Sourcesafe存储库移动到Mercurial的最佳方法是什么(我有兴趣保留所有历史记录)?

migration mercurial dvcs visual-sourcesafe

19
推荐指数
4
解决办法
5076
查看次数

Visual Studio 2005中的<inttypes.h>在哪里?

我想在Visual Studio项目中使用C99头文件inttypes.h(我想打印64位数字).

但是,我的安装中似乎不存在此文件.

这不是VS2005的一部分吗?还有其他选择吗?

c++ visual-studio-2005 c99

12
推荐指数
2
解决办法
8097
查看次数

Mercurial集成到Visual Studio 2005中?

有没有办法将Mercurial集成到Visual Studio 2005中?我们希望能够直接从IDE进行签入,查看历史记录等.

mercurial visual-studio-2005

11
推荐指数
2
解决办法
2237
查看次数

有一个普遍接受的习惯用于指示C++代码可以抛出异常吗?

我在使用C++代码时遇到了问题,这些代码意外地对调用者抛出异常.读取用于查看是否抛出异常的模块的每一行并不总是可行或实际的,如果是,则抛出异常类型.

是否存在处理此问题的成语或"最佳实践"?

我想到了以下几点:

  1. 在我们的doxygen文档中,我们可以在每个预期会抛出异常及其类型的函数中添加注释.

    • 加号:简单.
    • 缺点:受用户错误的影响.
  2. 我们可以安装应用程序try/catch(...).

    • 优点:我们不会再有任何未被捕获的例外情况了.
    • 缺点:异常远离投掷.很难弄清楚做什么或出了什么问题.
  3. 使用例外规范

    • 优点:这是处理这个问题的语言认可方式.
    • 缺点:重构问题库以使其有效.在编译时没有强制执行,因此违规会变成运行时问题,这正是我想要避免的!

有这些方法的经验,还是我不知道的任何其他方法?

c++ exception exception-specification

10
推荐指数
3
解决办法
1425
查看次数

Windows操作系统环境中C++应用程序与Java App之间的进程间通信

我们在Windows上有一个启动java进程的C++应用程序.这两个应用程序需要相互通信(通过xml的片段).

你会选择什么进程间通信方法,为什么?

我们的表上的方法是:共享文件,管道和套接字(虽然我认为这有一些安全问题).我对其他方法持开放态度.

c++ java windows ipc

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

为什么在此模板中使用typedef是必要的?

当我在Visual Studio 2005中编译此代码时:

  template <class T>
  class CFooVector : public std::vector<CFoo<T>>
  {
  public:
    void SetToFirst( typename std::vector<CFoo<T>>::iterator & iter );
  };

  template <class T>
  void CFooVector<T>::SetToFirst( typename std::vector<CFoo<T>>::iterator & iter )
  {
    iter = begin();
  }
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

c:\home\code\scantest\stltest1\stltest1.cpp(33) : error C2244:     'CFooVector<T>::SetToFirst' : unable to match function definition to an existing declaration
    c:\home\code\scantest\stltest1\stltest1.cpp(26) : see declaration of 'CFooVector<T>::SetToFirst'
    definition
    'void CFooVector<T>::SetToFirst(std::vector<CFoo<T>>::iterator &)'
    existing declarations
    'void CFooVector<T>::SetToFirst(std::_Vector_iterator<_Ty,_Alloc::rebind<_Ty>::other> &)'
Run Code Online (Sandbox Code Playgroud)

如果我将一个typedef添加到CFooVector模板,我可以获得编译和工作的代码:

  template <class T>
  class CFooVector : public std::vector<CFoo<T>>
  {
  public:
    typedef typename …
Run Code Online (Sandbox Code Playgroud)

c++ templates typedef typename

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