我正在从“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;
}
我的问题是,函数中第一个参数的常量。我从未在一个参数中看到过两个常量。我试图意识到,但我做不到。谢谢你的帮助。
答案 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