【发布时间】:2016-05-01 22:03:44
【问题描述】:
const 如何应用于const 成员函数中的模板成员?我发现以下内容很有趣(这是在 VS15 中):
class TcpSocket;
class TcpThread
{
TcpSocket* Listener() const;
std::vector< TcpSocket* > sockets_;
};
TcpSocket* TcpThread::Listener() const
{
auto s = sockets_.front();
return s;
}
我添加了auto 以澄清发生了什么。它被推导出为TcpSocket*,因此正在选择front 的非常量版本。但是,如果我插入
sockets_.erase(sockets_.begin());
作为第一行代码,编译失败,本质上说sockets_就是const。
让它像它一样工作是有意义的,但这里显然比简单地“在const 成员函数中将每个成员视为const。
【问题讨论】:
-
const 在成员函数声明的末尾意味着函数没有改变对象,所以如果你改变成员变量编译器会给你一个错误,第一个例子只是复制它允许它复制到非 const 版本
标签: c++ function templates constants member