1,只要某值真的保持不变,就应该明确表示出来,这样一来便可以获得编译器的帮助.
2,const最具威力的用途用在函数声明上.
3,令函数返回一个常量值,可以降低client的错误,有不至于放弃效率.
如:
const Rational operator*(const Rational& lhs,const Rational& rhs);
为了防止下面的情况:
Rational a, b, c;
...
(a * b) = c; // assign to the product of a*b!
注:将一个数值赋给两个数值的乘积结果,这在内建型别中肯定不合法.
4,将const应用于参数身上,其行为就想local const对象一样.
5,const member函数,指明那个成员函数可由const对象调用.
例:
class String
{
public:
...
// operator[] for non-const objects
char& operator[](int position)
{ return data[position]; }
// operator[] for const objects
const char& operator[](int position) const
{ return data[position]; }
private:
char *data;
};
String s1 = "Hello";
cout << s1[0]; // calls non-const
// String::operator[]
const String s2 = "World";
cout << s2[0]; // calls const
// String::operator[]
6,bitwise constness(位常量论)
如果成员是指针,意味着指针指向的对象可以被修改.
由此导出conceptual constness(概念常量论)
关键字:mutable,可以有效解放nonstatic data members在bitwise constness方面的束缚.
7,可能你想要改变const String* const str的值.
可能可行的办法:
做出一个local版的str,去掉const属性.
String* const localStr = const_cast<String* const>(str);
改变localStr,意味着str的改变,因为指针指向同一个地方.
还有一种情况:
例如strlen错误的声明:
size_t strlen(char *s); //应该是const char* s
cosnt char* mm="wisdom";
此时可以这么做:
strlen(const_cast<char*>(mm));
分享到:
相关推荐
条款21: 尽可能使用const 条款22: 尽量用“传引用”而不用“传值” 条款23: 必须返回一个对象时不要试图返回一个引用 条款24: 在函数重载和设定参数缺省值间慎重选择 条款25: 避免对指针和数字类型重载 条款26: 当心...
**条款21:尽可能使用const** - **背景**:`const`关键字用于标记不可修改的数据成员或函数参数。 - **原因**:使用`const`可以提高代码的健壮性和可读性。 - **示例**: ```cpp class MyClass { public: int ...
**条款21:尽可能使用const** - **目的**: 提升代码的安全性和效率。 - **解释**: 使用`const`关键字可以明确指出一个变量或参数在函数中不应该被修改。这样不仅可以提高代码的安全性,还可以让编译器优化代码执行...
条款03:尽可能使用const use const whenever possible. 条款04:确定对象被使用前已先被初始化 make sure that objects are initialized before they're used. 2. 构造/析构/赋值运算 constructors, destructors, ...
条款03:尽可能使用const 条款04:确定对象被使用前已先被初始化 2.构造/析构/赋值运算 条款05:了解C++默默编写并调用哪些函数 条款06:若不想使用编译器自动成生的函数,就该明确拒绝 条款07:为多态基类声明...
3. **条款3:尽可能使用引用而非指针** - 引用没有空值,且强制关联到一个对象,提供了更安全的接口。 - 使用引用作为函数参数,可以确保函数不会接收到空指针。 4. **条款4:尽量不使用原始指针,除非你真的需要...
**条款 03:尽可能使用 const** 在C++中,`const`关键字用于指示变量或函数的不可变性。使用`const`可以提高代码的清晰度和安全性: 1. **const 修饰变量**:`const`变量一旦被初始化,就不能再改变其值。这有助于...
第3条款:尽可能使用const const关键字可以用于修饰变量、函数参数和返回值,以确保数据的安全和不可修改性。使用const可以提高代码的可读性和可维护性。 第4条款:确定对象被使用前已先被初始化 在C++中,对象的...
4. 条款3:尽可能使用const - 使用const可以指定变量或函数的意图,增加代码可读性和安全性。 - const成员函数不可修改对象的状态。 - 对于指针,const可以指针本身是否可变,也可以指针所指向的内容是否可变。 ...
5. **条款5:使用const以表明不变性** - 通过声明函数参数和成员为const,表明它们在函数执行过程中不会改变,这有助于提高代码的可读性和安全性。 6. **条款6:区别指针与引用** - 指针可以为空,可以被重新赋值,...
#### 条款21:永远让比较函数对相等的值返回false - **核心概念**:比较函数应该能够正确处理相等的情况。 - **应用场景**: - 实现关联容器的比较逻辑时,确保不会出现逻辑错误。 #### 条款22:避免原地修改set...
### 条款03:尽可能使用const const关键字用于修饰变量或成员函数,表达其不可变的属性。在C++中,const可以修饰指针的指向、指针本身或两者。例如: - **指向常量的指针**:`const std::vector<int>::iterator ...
- 条款3:尽可能使用const - 条款4:确定对象使用前已被初始化 每一个条款都针对C++编程中的具体问题,提出了解决方案和注意事项。例如,条款1强调了C++语言的多样性,它不仅可以被视为一个语言联邦,还是一个多重...
下面尽可能全面的总结const 的用法和技巧。主要资料来源于c++ primer,标题后的页码为c++ primer 中文版(第四版)的页码。 (一) const限定符(p49) 定义const对象时要初始化 除非特别说明,在全局作用域...
### Effective C++中文版知识点概览 #### 一、从C转向C++ ... - 在C++编程中,应尽可能避免使用预处理宏`#define`,转而使用`const`和`inline`等功能来定义常量和函数,以提高代码的质量和可维护性。
这一条款强调了在C++中应该尽可能避免使用预处理器指令,尤其是`#define`宏定义,转而使用C++语言本身提供的特性,如`const`和`inline`关键字。 - **预处理器宏的局限性**:使用`#define`宏定义常量时,这些宏在...
在C++中,推荐的做法是尽可能使用引用和智能指针等高级特性来替代原始指针的使用。 #### 四、预处理宏与现代C++的结合 一个常见的转换建议是在C++中尽量避免使用`#define`宏定义,而是采用`const`关键字或者`...
#### 尽可能使用const(条款03) `const`关键字的广泛使用,是C++编程中的一项最佳实践。它可以用来标记不会被修改的数据成员、函数参数和返回值,有助于: - **保护数据**:防止数据被意外修改,增强代码的安全性...
使用预处理器宏`#define`来定义常量是一个常见的C编程实践,但在C++中,建议尽可能使用`const`和`inline`关键字来定义常量。 - **问题**:使用`#define`定义的常量在编译前由预处理器展开,这会导致编译器无法识别...