【发布时间】:2015-04-06 12:57:41
【问题描述】:
是否可以这样声明一个函数
auto i = foo.GetLock();
有效,但是
foo.GetLock();
导致编译错误?
我的接口有一个返回 RIIA 风格锁对象的方法,我想确保没有人决定只调用 GetLock() 来锁定锁。
以前是这样的
class CSomethingOrElse : private CLockable
{
...
} foo;
CLocker<CSomethingOrElse> lock(foo);
但这对我来说太冗长了,我真的很想使用auto。
【问题讨论】:
-
如果 getLock 返回一个类,该类在销毁时解锁:它不会如您所愿阻止非赋值调用,但会阻止锁定锁定
-
clang 和 gcc 对此有警告(使用函数的返回值)。 (见stackoverflow.com/questions/2870529/…)
-
@Jarod42 :但在这种情况下,您通常会收到大量警告,不是吗?很多函数都使用了可选的返回值(比如流操作符等)
-
@galinette:警告适用于属性,因此只有指定的函数会引发警告。
标签: c++