你走多远const?您是否只是const在必要时制作功能,或者您是否全力以赴并在任何地方使用它?例如,想象一个简单的mutator,它接受一个布尔参数:
void SetValue(const bool b) { my_val_ = b; }
Run Code Online (Sandbox Code Playgroud)
这const实际上有用吗?我个人选择广泛使用它,包括参数,但在这种情况下,我想知道它是否值得?
我还惊讶地发现你可以省略const函数声明中的参数,但可以将它包含在函数定义中,例如:
.h文件
void func(int n, long l);
Run Code Online (Sandbox Code Playgroud)
.cpp文件
void func(const int n, const long l)
Run Code Online (Sandbox Code Playgroud)
是否有一个原因?这对我来说似乎有点不寻常.
有什么区别:
char * const
Run Code Online (Sandbox Code Playgroud)
和
const char *
Run Code Online (Sandbox Code Playgroud) 我经常使用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 int * i;
int * const i;
const volatile int ip;
const int *i;
Run Code Online (Sandbox Code Playgroud)
上述任何声明是否有误?
如果不是它们之间的含义和区别是什么?
什么是上述声明的有效使用(我的意思是在什么情况下,我们在C/C++ /嵌入式C使用它们)?
我有以下C++代码,其中声明中我的构造函数的参数具有与构造函数的定义不同的常量.
//testClass.hpp
class testClass {
public:
testClass(const int *x);
};
//testClass.cpp
testClass::testClass(const int * const x) {}
Run Code Online (Sandbox Code Playgroud)
我能够使用g ++编译这个没有警告,如果这个代码编译或至少给出一些警告?事实证明,64位solaris上的内置C++编译器给了我一个链接器错误,这就是我注意到存在问题的方式.
在这种情况下匹配参数的规则是什么?这取决于编译器吗?