最近有一个关于运算符++++和的序列的问题----。启发...
Sutter 在《New Hard Problems》33 中有一个有趣的问题,关于在一行正确的 C++ 代码中可以使用多少个相同的一个或另一个运算符的符号(不考虑注释、预处理器、宏、文字)。
我的问题是,随着C++11/14标准的发布,他对这个问题的回答变了吗?
据我了解,现在序列>>>>变得无限 - 现在不需要在模板中插入空格......
其他运营商 - 应该保持不变。
但现在在 C++ 中,这种结构&&又具有了另一种含义。对此,问题在于:萨特五连胜的决定是保持不变&还是现在可以被超越?
这不是竞赛,但如果有人打败了 Sutter 的解决方案,那将会很有趣。供参考:,,,,, - 琐碎的无限序列- 五件
+, --每!件四件- 甚至都不好笑 :)~*
&
<|
...
是的,获得两个 %%或那里 ^^也很容易:
class X
{
public:
void operator%(int);
};
typedef void(X::*F)(int);
void operator%(F,X){}
int main(int argc, const char * argv[])
{
X x;
&X::operator%%x;
}
在我看来,在 c++11 中使用新语义 for
&&将不允许您构建比 Sutter 更长的链(连续 5 个字符)。我认为如此的原因取决于可能的新使用环境&&:为局部变量的类型指定一个右值引用:
在模板函数中使用通用引用:
对局部
auto变量使用通用引用:为右值/左值对象重载成员函数:
在所有提到的上下文中,它
&&在声明实体时使用。&此处不能连续指示超过 2个。编译器将报告无法对引用进行引用。例如,对于clang:对于模板函数或为右值/左值重载的函数,调用时不显式要求类型,而是根据表达式的类型确定。那些。
&调用时根本不使用。如果使用它们,则仅用于显式转换,&仍然无法指定两个以上。例如:当您尝试指定更多时 - 我们会收到前面提到的“链接到链接”错误。
那。
&不允许打破 Sutter 在 c++11 中出现新引用语义的记录。六个点
......。基于与 enSO的沟通。我们有代码:
这里有一个结构模板,以及这个模板的部分特化,用于通过一个接受多个参数并返回 type
X的函数进行类型参数化。U......TU......U... ...与或相同U..., ...。U...是传递给模板的未命名类型集,后跟...C 省略号以确保传递的参数数量可变。因此,要实例化模板特化,您可以使用例如以下代码:x由返回int并接受至少 2 个参数的函数参数化:一个类型double,第二个类型char,之后可以使用任意数量的附加参数(如中printf),您需要使用头文件中的函数来访问这些参数<cstdarg>。当使用省略号之间没有显式逗号的选项时, clang会发出一条警告,解释其本质: