7

我正在阅读 boost 文档,并在http://www.boost.org/doc/libs/1_54_0/doc/html/lambda/le_in_details.html看到以下内容:

不能重载的运算符

有些运算符根本不能重载(::, ., .*)。对于某些运算符,对返回类型的要求阻止它们被重载以创建 lambda 仿函数。这些运算符是->。、->、new、new[]、delete、delete[] 和 ?:(条件运算符)。

那么什么是运营商->.?我尝试了 Google 和http://www.symbolhound.com/但没有得到任何有用的信息,在N3337上搜索会得到 1->个位于句子末尾的结果,并且 Visual Studio 2012 不会编译:

class xT {
    bool operator ->. () {} /* fail */
};

std::string* p;
p->.size(); /* fail */

std::auto_ptr<std::string> a;
a->.size(); /* fail */

我相信作者故意写了->.since->并且.也包括在内,但是什么是->.,或者为什么它在这里?

4

3 回答 3

7

它似乎是一个错字。

在 C++ 草案 3690 中,没有提到 operator ->.

它可能是->*

5.5 指向成员的操作符 [expr.mptr.oper]

指向成员运算符->*.*组的指针从左到右。

http://www.boost.org/doc/libs/1_54_0/doc/html/lambda/le_in_details.html中,他们有一些关于这个运算符的例子。

于 2013-09-20T08:22:00.473 回答
3

从 C++11, 2.13: "Operators and punctuators" 中可以看出,没有像 " ->." 这样的操作符。

于 2013-09-20T08:18:25.500 回答
0

没有像“->”这样的运算符。 http://msdn.microsoft.com/en-us/library/x04xhy0h.aspx

于 2013-09-20T08:22:33.863 回答