相关疑难解决方法(0)

何时使用引用与指针

我理解指针与引用的语法和一般语义,但是我应该如何决定何时在API中使用引用或指针?或多或少?

当然,有些情况需要一个或另一个(operator++需要一个引用参数),但总的来说,我发现我更喜欢使用指针(和const指针),因为语法清楚地表明变量是破坏性地传递的.

例如,在以下代码中:

void add_one(int& n) { n += 1; }
void add_one(int* const n) { *n += 1; }
int main() {
  int a = 0;
  add_one(a); // Not clear that a may be modified
  add_one(&a); // 'a' is clearly being passed destructively
}
Run Code Online (Sandbox Code Playgroud)

使用指针,它总是(更加)明显地发生了什么,所以对于API等,清晰度是一个大问题,指针不是比引用更合适?这是否意味着只应在必要时使用引用(例如operator++)?是否有任何性能问题?

编辑(已完成):

除了允许NULL值和处理原始数组之外,似乎选择归结为个人偏好.我已经接受了下面引用Google的C++样式指南的答案,因为它们提出了"引用可能令人困惑,因为它们具有值语法但指针语义"的观点.

由于清理不应该为NULL的指针参数所需的额外工作(例如,add_one(0)将调用指针版本并在运行时中断),从可维护性的角度来看,使用必须存在对象的引用是有意义的,尽管这是一种耻辱失去句法的清晰度.

c++ pointers reference

366
推荐指数
11
解决办法
18万
查看次数

什么是阵列衰减?

什么是阵列的衰变?与数组指针有关系吗?

c c++ arrays pointers

358
推荐指数
8
解决办法
5万
查看次数

从向量中提取子向量的最佳方法?

假设我有一个std::vector(让我们称之为myVec)大小N.构造由元素X到Y的副本组成的新向量的最简单方法是什么,其中0 <= X <= Y <= N-1?例如,myVec [100000]通过myVec [100999]大小的向量150000.

如果使用向量无法有效地完成此操作,是否应该使用另一种STL数据类型?

c++ stl vector range

274
推荐指数
8
解决办法
29万
查看次数

为什么C++没有垃圾收集器?

我不是问这个问题,因为垃圾收集的优点首先.我提出这个问题的主要原因是我知道Bjarne Stroustrup已经说过C++在某些时候会有一个垃圾收集器.

话虽如此,为什么还没有添加?已经有一些垃圾收集器用于C++.这只是那些"说起来容易做起来难"的事情吗?还是有其他原因没有添加(并且不会在C++ 11中添加)?

交叉链接:

为了澄清,我理解为什么C++在第一次创建时没有垃圾收集器的原因.我想知道为什么收藏家不能加入.

c++ garbage-collection c++11

258
推荐指数
11
解决办法
15万
查看次数

gsl库中span和array_view的区别是什么?

在最近的几次会议演示中,我听说Bjarne Stroustrup和其他人提到了C++的新编码指南以及支持它们的一些类型.

具体来说,我记得一个例子,span<T>而不是(T* p, int n)作为一个函数的参数(在约32:00进入谈话时); 但我也记得使用的建议array_view<T>.它们是两个替代方案但是相同的概念吗?或者我是否混淆了事情,他们实际上并没有那么相关?

我似乎无法找到任何关于它们应该是什么的权威定义.

c++ array-view cpp-core-guidelines guideline-support-library

85
推荐指数
3
解决办法
2万
查看次数

使用C++中的模板变量进行结构化

我正在玩模板.我不是要重新发明std :: vector,我试图掌握C++中的模板.

我可以这样做吗?

template <typename T>
typedef struct{
  size_t x;
  T *ary;
}array;
Run Code Online (Sandbox Code Playgroud)

我想要做的是一个基本的模板化版本:

typedef struct{
  size_t x;
  int *ary;
}iArray;
Run Code Online (Sandbox Code Playgroud)

如果我使用类而不是struct,它看起来像是有效的,所以使用typedef结构是不可能的?

c++ templates struct class

61
推荐指数
4
解决办法
12万
查看次数

C++类/结构成员的默认可见性

在C++中,为什么private是类的成员的默认可见性,但是对于结构是公共的?

c++ struct class member

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

将数组传递给函数(以及它在C++中不起作用的原因)

我遇到了一些编译的C代码,但我不明白为什么.具体来说,我有一个C库,它有很多使用这种格式的代码:

void get_xu_col(int i_start,
                int n,
                double x[n],
                int n_x,
                int n_u,
                int n_col,
                double xu_col[n_col][n_x + n_u]){
    ... 
}

int main(){
    ...
    double xu_col[n_col][n_x + n_u];
    get_xu_col( ..., xu_col );
    ...
}
Run Code Online (Sandbox Code Playgroud)

我不明白的是编译器允许在数组中调整大小的原因.据我所知,尺寸必须固定(例如xu_col[9][7])或未定义(例如xu_col[][]).在上面的代码中,似乎大小不是编译时常量.

编译器是否只是忽略了这里的参数?或者它是否真的在维度上进行编译时检查?

如果是后者,那么分别传递尺寸似乎容易出错.

问题的第二部分是:

为什么相同的版本在C++中不起作用?当我从字面上文件扩展名从改变.c.cpp,并尝试重新编译,我得到

candidate function not viable: no known conversion from 'double [n_col][n_x + n_u]' to 'double (*)[n_x + n_u]' for 7th argument
void get_xu_col(int i_start, int n, double x[n], int n_x, int n_u, int n_col, double …
Run Code Online (Sandbox Code Playgroud)

c c++

44
推荐指数
5
解决办法
6540
查看次数

const向量意味着const元素?

是否const vector<A>意味着它的元素也是const如此?

在下面的代码中,

v[0].set (1234); in void g ( const vector<A> & v ) 产生编译器错误

const.cpp:28:3:错误:成员函数'set'不可行:'this'参数的类型为'const value_type'(又名'const A'),但函数未标记为const

为什么?

(*v[0]).set(1234);void h ( const vector<A *> & v ) 是编译器确定.

版本之间有什么区别?

// ...........................................................
class A {
private:
  int a;
public:
  A (int a_) : a (a_) { }
  int get () const { return a; }
  void set (int a_) { a = a_; }
};

// ...........................................................
void g ( const vector<A> & …
Run Code Online (Sandbox Code Playgroud)

c++ const

32
推荐指数
4
解决办法
3万
查看次数

在 C++ 中从单个向量创建对向量

我有一个偶数大小的向量,我想将其转换为成对的向量,其中每对始终包含两个元素。我知道我可以使用简单的循环来做到这一点,但我想知道是否有一个很好的标准库工具可以做到这一点?可以假设原始向量始终包含偶数个元素。

例子:

vector<int> origin {1, 2, 3, 4, 5, 6, 7, 8};

vector<pair<int, int>> goal { {1, 2}, {3, 4}, {5, 6}, {7, 8} };
Run Code Online (Sandbox Code Playgroud)

c++ stl std stdvector std-pair

25
推荐指数
3
解决办法
2213
查看次数