c++ - 按值传递的函数参数的常量正确性

标签 c++ c arguments constants

<分区>

Possible Duplicate:
Const correctness for value parameters

我认为以下是良好的编码习惯。当一个参数按值传递给一个函数时,它应该只被读取,而不是在函数体中被修改(或重用)。但这实际上是一种好的做法吗?

示例(我避免做的事情):

int foo(int x){
    //do lots of cool stuff
    x = 69;
    //do even cooler stuff
}

从这里开始,我们将了解 const 的正确性。只要我的做法是好的,几乎每个函数的每个参数都应该以“const”开头。实际上“a”是乐观的:

class A{
    const int gnoo(const int *const, const double) const;
};

最佳答案

问题有两个方面,声明定义。在声明点,函数参数的顶级限定符被删除,因此 const 被编译器删除。另一方面,在定义 中,编译器确保如果参数是const,它不会在内部被修改。

返回类型是另一回事,const 没有从声明 中删除,但在这种情况下,您很可能不希望返回对象(如果它是按值)const,因为这可能会限制以几种不同方式优化编译器的机会。第一个,C++11 中全新的是你不能移动 const 对象,这意味着通过返回一个 const您禁止移动的对象。在 C++03 中,这种影响的情况更少,更多的是极端情况,但返回 const 对象的优势有限。

有些人建议在任何地方都添加const。我不知道,我读过的大多数代码也不知道。

关于c++ - 按值传递的函数参数的常量正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818240/

相关文章:

c++ - 基类构造函数不会调用派生类版本的虚方法

c++ - 在 shell 脚本中使用 -D name 编译选项

c++ - 第一次在 C++ 中使用类,发生了什么?

java - 在linux中如何识别一个进程是java还是c或c++进程?

Python 装饰器调用不同类中的函数

javascript - 为什么这个值在reduce范围内未定义,但在for循环中定义? (javascript)

c++ - 警告 : comparison between pointer and integer, 传递 ‘read’ 的参数 1 从指针生成整数而不进行强制转换

比较 C 中的字符串文字命令行参数

c - C如何保护指针内存?

actionscript-3 - AS3 参数