相关疑难解决方法(0)

什么是复制和交换习语?

这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?

虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:

c++ c++-faq copy-constructor assignment-operator copy-and-swap

1907
推荐指数
5
解决办法
34万
查看次数

const指针有什么用(与指向const对象的指针相对)?

我经常使用const对象的指针,就像这样......

const int *p;
Run Code Online (Sandbox Code Playgroud)

这只是意味着您无法更改p指向的整数p.但是我也看到了const指针的引用,这样宣称......

int* const p;
Run Code Online (Sandbox Code Playgroud)

据我所知,这意味着指针变量本身是不变的 - 你可以改变它整天指向的整数,但你不能指出其他东西.

有什么可能的用途?

c c++ const

28
推荐指数
5
解决办法
1万
查看次数

为什么operator ++返回非const值?

我读过Scott Meyers编写的Effective C++ 3rd Edition.

本书的第3项" const尽可能使用",如果我们想要防止rvalues被意外地分配给函数的返回值,那么返回类型应该是const.

例如,增量函数iterator:

const iterator iterator::operator++(int) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后,防止了一些事故.

iterator it; 

// error in the following, same as primitive pointer
// I wanted to compare iterators
if (it++ = iterator()) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是,std::vector::iteratorGCC中的迭代器不返回const值.

vector<int> v;
v.begin()++ = v.begin();   // pass compiler check
Run Code Online (Sandbox Code Playgroud)

这有什么理由吗?

c++ const return-value

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

尽可能保持"常量"是一个好主意吗?

最近,我一直在开发一种在我的代码中做很多事情的做法const:

(1)功能论证,我知道永远不会改变.例如:

void foo (const int i, const string s)
          ^^^^^        ^^^^^ 
Run Code Online (Sandbox Code Playgroud)

(2)返回类型为const.例如:

struct A {
...
  const int foo () { return ...; }
  ^^^^^
  operator const bool () const { return ...; }
           ^^^^^
};
Run Code Online (Sandbox Code Playgroud)

(3)整数或字符串的平凡计算.例如:

const uint size = vec.size();
^^^^^
const string s2 = s1 + "hello ";
^^^^^
Run Code Online (Sandbox Code Playgroud)

......还有更多的地方.通常在其他现实世界的代码中,我没有看到标记为的这种小规模变量const.但我想,让它们const永远不会受到伤害.这是一个很好的编程习惯吗?

c++ coding-style const

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

(const char * str),(char const * str)和(char * const str)有什么区别?

可能的重复:
char * const和const char *有什么区别?
const char * const vs const char *?

当我们在c中定义一个函数时,我们可以使用(const char * str),(char const * str)或(char * const str)作为变量。它们之间有什么区别?

c pointers const

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