小编Joh*_*McG的帖子

适用于Mac的C++ IDE

我使用Visual Studio教授C++课程.我的一个学生有一台Mac,正在寻找可以在他的机器上使用的IDE.什么是好推荐?

c++ ide macos

111
推荐指数
4
解决办法
21万
查看次数

开发人员是否应该首先考虑可读性或性能?

通常情况下,开发人员将面临解决问题的两种可能方式之间的选择 - 一种是惯用的和可读的,另一种不太直观,但可能表现更好.例如,在基于C语言中,有两种方法可以将数字乘以2:

int SimpleMultiplyBy2(int x)
{
    return x * 2; 
}
Run Code Online (Sandbox Code Playgroud)

int FastMultiplyBy2(int x)
{
    return x << 1;
}
Run Code Online (Sandbox Code Playgroud)

第一个版本更容易为技术和非技术读者选择,但第二个版本可能表现更好,因为比特移位比乘法更简单.(现在,让我们假设编译器的优化器不会检测到它并对其进行优化,尽管这也是一个考虑因素).

作为开发人员,最初的尝试会更好吗?

performance readability

74
推荐指数
9
解决办法
9124
查看次数

在C++中clone()的最佳签名是什么?

正如Scott Myers写的那样,你可以利用C++的类型系统中的松弛来声明clone()返回一个指向所声明的实际类型的指针:

class Base
{
    virtual Base* clone() const = 0;
};

class Derived : public Base
{
    virtual Derived* clone() const
};
Run Code Online (Sandbox Code Playgroud)

编译器检测到clone()返回指向对象类型的指针,并允许Derived覆盖它以返回指向派生的指针.

希望让clone()返回一个智能指针,它意味着所有权语义的转移,如下所示:

class Base
{
   virtual std::auto_ptr<Base> clone() const = 0;
};

class Derived : public Base
{
    virtual std::auto_ptr<Derived> clone() const;
};
Run Code Online (Sandbox Code Playgroud)

不幸的是,约定的放宽并不适用于模板化的智能指针,编译器也不允许覆盖.

所以,似乎我有两个选择:

  1. 让clone()返回一个"哑"指针,并记录客户端负责处理它.
  2. 让clone()返回一个智能基指针,并让客户端使用dynamic_cast将它们保存到Derived指针(如果需要).

这些方法之一是首选吗?或者有没有办法让我吃掉我的所有权语义转移并且我的强大类型安全呢?

c++ clone smart-pointers covariant-return-types

23
推荐指数
4
解决办法
1万
查看次数

失踪 ';' 在'使用'之前

我使用以下代码获得此编译错误:

错误C2143:语法错误:缺少';' 在'使用'之前

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include "s.h"

using namespace std;
Run Code Online (Sandbox Code Playgroud)

这怎么可能?怎么修好?

c++

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

但是,真的,gmail如何仍然是"测试版"?

  • 它已经出了差不多五年了.
  • 它有数千万用户
  • 我怀疑有几家企业依赖它.

它怎么还是"测试版"?在什么时候它将不再是测试版?什么时候它完全拥有电子邮件市场?

gmail

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

有哪些技术可以限制C++项目中的编译依赖性?

在C++项目中,编译依赖性可能使软件项目难以维护.在模块内和跨模块限制依赖关系的一些最佳实践是什么?

c++ dependencies

6
推荐指数
2
解决办法
1008
查看次数

指示双值尚未初始化的最佳方法是什么?

我有一个类CS,它代表3D中的坐标系,即(x,y,z)

class CS
{
  private:
        double x;
        double y;
        double z;
}

CS::CS()
{
   x = NULL;//this causes x = 0//i want the address of x to be 0x000000 & not x = 0
   y = NULL;
   z = NULL:
}
Run Code Online (Sandbox Code Playgroud)

我希望用户可以创建一个CS(0,0,0).在构造函数中,我想将x,y和z的地址初始化为NULL.这是为了区分用户定义的(0,0,0)和默认值.我正在动态创建CS的对象,因此使用以下代码没有意义:

class CS
{
  private:
        double *x;
        double *y;
        double *z;
}

CS:CS()
{
    x = new double;
    x = NULL;
    //same for y & z
}
Run Code Online (Sandbox Code Playgroud)

首先,我想手动为任何变量(int或double或char)分配0x000000地址而不使用指针.有什么建议?

c++ null

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