相关疑难解决方法(0)

使用'const'作为函数参数

你走多远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)

是否有一个原因?这对我来说似乎有点不寻常.

c++ const

368
推荐指数
15
解决办法
24万
查看次数

函数原型和函数实现签名是否可以使用const不一致?

我喜欢const在可能的情况下声明偶数值参数,通过搜索SO,我发现这并不常见.像这样:

int add(const int a, const int b)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我想知道:const因为是我的函数的实现细节,而不是它的接口的一部分.因此将它放入原型似乎是不必要的.

这个上述函数的原型似乎工作得很好:

int add(int a, int b);
Run Code Online (Sandbox Code Playgroud)

然而,我听说过一些问题,例如将main函数的argc声明为const会导致问题:

int main(const int argc, const char* const argv[])
Run Code Online (Sandbox Code Playgroud)

这是否意味着,int add(int a, int b)int add(const int a, const int b)终究不是相同?

如果它在技术上还可以,我应该做些什么?我也可以在原型中省略变量名,但我没有,所以也许我也不应该遗漏const

c c++ const header function-prototypes

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

在C中,仅在函数定义中添加`const`是合法的,而不是声明吗?

是否const为标准允许的函数参数添加其他说明符,如下所示?

foo.h:

int foo(int x, char * data);
Run Code Online (Sandbox Code Playgroud)

foo.c:

// does this match the prototype?
int foo(const int x, char * const data) {
    // this implementation promises not to change x or move data inside the function
}
Run Code Online (Sandbox Code Playgroud)

GCC接受它-std=c99 -Wpedantic -Wall -Werror,但不一定与标准兼容.

这个答案表明C++标准允许这样做 - C(99)标准是否允许这样做?


还有另外一个问题,在这里和一个很好的答案在这里为C++

c const c99

6
推荐指数
1
解决办法
135
查看次数

构造函数定义和声明之间不匹配

我有以下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++编译器给了我一个链接器错误,这就是我注意到存在问题的方式.

在这种情况下匹配参数的规则是什么?这取决于编译器吗?

c++ solaris g++

5
推荐指数
3
解决办法
842
查看次数

标签 统计

c++ ×3

const ×3

c ×2

c99 ×1

function-prototypes ×1

g++ ×1

header ×1

solaris ×1