一个参数中有2个常量

时间:2013-07-22 23:40:05

标签: c++ templates

我正在从“C ++ for Programmers”一书中学习C ++。在“模板”部分中,有一个类似的代码:

template<typename T>
void printArray(const T * const array, int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << array[i] << " ";
    }

    cout << endl;
}

我的问题是,函数中第一个参数的常量。我从未在一个参数中看到过两个常量。我试图意识到,但我做不到。谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

const T * const表示:指向常量T的常量指针。这意味着指针和指向的T都是常量。

阅读此类参数的一个好规则是read it right to left

答案 1 :(得分:1)

在您的示例中,您有const指针指向const类型的T对象。这意味着您无法更改指针指向的位置或指向的对象。

实际上,你可以在一行中的更多地方拥有const。以此声明为例:

class MyClass {
public:
    const std::string& get_name(const int * const id) const;
};

在这种情况下,函数get_name是常量,不能修改MyClass的实例。它接受一个指向常量整数的常量指针,并返回对字符串的常量引用。

如果您想在使用const(以及C ++的其他部分)时了解有关最佳做法的更多信息,我强烈推荐Bruce Eckel的书Effective C++: 55 Specific Ways to Improve Your Programs and Designs

答案 2 :(得分:0)

语法只是告诉你有一个指针是const,它指向的东西也是const。

如需更多阅读,我建议您查看:

http://www.parashift.com/c++-faq/const-ptr-vs-ptr-const.html

http://www.parashift.com/c++-faq/const-correctness.html