我使用Visual Studio教授C++课程.我的一个学生有一台Mac,正在寻找可以在他的机器上使用的IDE.什么是好推荐?
通常情况下,开发人员将面临解决问题的两种可能方式之间的选择 - 一种是惯用的和可读的,另一种不太直观,但可能表现更好.例如,在基于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)
第一个版本更容易为技术和非技术读者选择,但第二个版本可能表现更好,因为比特移位比乘法更简单.(现在,让我们假设编译器的优化器不会检测到它并对其进行优化,尽管这也是一个考虑因素).
作为开发人员,最初的尝试会更好吗?
正如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)
不幸的是,约定的放宽并不适用于模板化的智能指针,编译器也不允许覆盖.
所以,似乎我有两个选择:
这些方法之一是首选吗?或者有没有办法让我吃掉我的所有权语义转移并且我的强大类型安全呢?
我使用以下代码获得此编译错误:
错误C2143:语法错误:缺少';' 在'使用'之前
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include "s.h"
using namespace std;
Run Code Online (Sandbox Code Playgroud)
这怎么可能?怎么修好?
它怎么还是"测试版"?在什么时候它将不再是测试版?什么时候它完全拥有电子邮件市场?
在C++项目中,编译依赖性可能使软件项目难以维护.在模块内和跨模块限制依赖关系的一些最佳实践是什么?
我有一个类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++ ×5
clone ×1
dependencies ×1
gmail ×1
ide ×1
macos ×1
null ×1
performance ×1
readability ×1