以下C++代码中const表示什么意思?在C#中有什么等价物?我主要使用C#,现在想学习C++。
template <class T> class MaximumPQ {
public:
virtual ~MaximumPQ () {}
virtual bool IsEmpty () const = 0;
virtual void Push(const T&) = 0;
virtual void Pop () = 0;
};
以下C++代码中const表示什么意思?在C#中有什么等价物?我主要使用C#,现在想学习C++。
template <class T> class MaximumPQ {
public:
virtual ~MaximumPQ () {}
virtual bool IsEmpty () const = 0;
virtual void Push(const T&) = 0;
virtual void Pop () = 0;
};
第一个关键字告诉编译器,这个方法不会改变它所调用的对象的任何成员变量,也只会调用其他const方法。
基本上,它保证该方法没有副作用。
第二个关键字指定传递的引用所指向的对象不会被修改 - 只有在其上调用const方法。
C#中没有等效的签名。
std::string *
as a field, and that std::string
can be modified (via the dereferenced pointer) even if the method doing the modified is declared const
。翻译:这并不能保证没有副作用 - 只是没有副作用在调用方法的对象上。那个对象可能有一个std :: string *
作为字段,即使声明为const
的方法执行修改,该std :: string
也可以通过解引用指针进行修改。 - Jonathan Grynspanconst
成员函数可能仍然做所有这些事情。此外,它甚至可能会更改成员数据,无论是mutable
数据还是非mutable
数据(通过去除const
)。唯一的const
表示的是函数意图使对象保持不变。副作用根本没有涉及。 - sbiIsEmpty()
是一个带有const限定符的成员函数。这意味着this
指针是带有const限定符的,因此它将具有类型const MaxPQ*
。在IsEmpty()
内部的代码不能调用任何未带有const限定符的this
上的成员函数,也不能修改任何不是mutable
的数据成员。
据我所知,在C#中没有类似的功能。
const MaxPQ *const
吗?还是 this
是一个非 const 但不可修改的特殊情况? - Steve Jessopthis
是一个 rvalue,因此无法被 const 限定(非类类型的 rvalue 永远不会被 const 或 volatile 限定)。由于它是非类类型的 rvalue,所以无法被修改。 - James McNellis__this
,类型为cv-qualifiers class-name*
,那么你可以使用#define this (__this + 0)
。当然这不一定是真实情况。 - GManNickG