基本数据类型的常量的情况下

2.9课——const constexpr,和符号常量,你了解到的基本数据类型(int,char,双,等)可以通过const关键字const,const变量,都必须在创建时初始化。

在基本数据类型的常量的情况下,初始化可以通过复制、直接,或统一的初始化:

2
3
const int value1 = 5; // copy initialization
const int value2(7); // direct initialization
const int value3 { 9 }; // uniform initialization (C++11)

both of the above线的东西是因为他们涉及的变量或常量性,做到违法的东西by either of the attempting to改变成员变量直接,或在有成员函数,通过尝试改变成员变量。
const成员函数
现在,consider the following line of代码:
1
输出something.getvalue();
也许surprisingly,这也将因编译错误,即使GetValue()不做任何改变的成员变量。它原来是const对象类const成员函数只能显式调用GetValue),and has not been marked(as a const成员函数。在const成员函数是一个成员函数,保证它不会修改任何目标或使命非const成员函数(as they may修改the object)。
to make GetValue const成员函数(),我们简单地添加the const关键词to the函数原型,after the参数列表,但before the函数体。

1
2
3
4
5
6
7
8
9
10
11
12
class Something
{
public:
    int m_value;
 
    Something() { m_value= 0; }
 
    void resetValue() { m_value = 0; }
    void setValue(int value) { m_value = value; }
 
    int getValue() const { return m_value; } // note addition of const keyword after parameter list, but before function body
};
在这个例子中,resetvalue()已标记为const成员函数,但它试图改变m_value。这将导致编译器错误。
注意,构造函数不能为const。这是因为const对象必须初始化其成员变量和常量的构造函数也无法这样做。因此,语言不允许const构造函数。
值得注意的是,const对象不需要初始化它的成员变量(即,它是法律为const类对象调用构造函数初始化所有,一些成员变量,或没有)!
规则:任何成员函数不能修改类对象的const的状态
const引用
虽然实例化const类对象是创建的const对象的一种方式,一种更常见的方式是通过传递一个对象到一个函数的引用。
在课上通过引用传递参数,我们覆盖的过往类观点const引用而不是通过值的优点。综上所述,通过值传递参数引起的一类类的拷贝进行(这是慢),大多数时候,我们不需要复制,参考原参数的作品就好了,更是因为它避免了不必要的复制性能。我们通常会参考常量以确保功能不无意中改变参数,并允许功能与R值(如文字),它可以是const引用过,但不是非const引用。
你能想出下面的代码有什么问题吗?

你可能感兴趣的:(基本数据类型的常量的情况下)