RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 597812
Accepted
Harry
Harry
Asked:2020-11-30 23:46:42 +0000 UTC2020-11-30 23:46:42 +0000 UTC 2020-11-30 23:46:42 +0000 UTC

&&&&& 和其他运营商怪癖

  • 772

最近有一个关于运算符++++和的序列的问题----。启发...

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++
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    αλεχολυτ
    2020-01-09T21:20:23Z2020-01-09T21:20:23Z

    在我看来,在 c++11 中使用新语义 for&&将不允许您构建比 Sutter 更长的链(连续 5 个字符)。我认为如此的原因取决于可能的新使用环境&&:

    • 为局部变量的类型指定一个右值引用:

      R&& r = makeR();
      
    • 在模板函数中使用通用引用:

      template<typename T>
      void f(T&& param);    
      
    • 对局部auto变量使用通用引用:

      auto&& r = f(something);
      
    • 为右值/左值对象重载成员函数:

      struct S {
          void f() & {}
          void f() && {}
      };
      

    在所有提到的上下文中,它&&在声明实体时使用。&此处不能连续指示超过 2个。编译器将报告无法对引用进行引用。例如,对于clang:

    'variable' declared as a reference to a reference
    

    对于模板函数或为右值/左值重载的函数,调用时不显式要求类型,而是根据表达式的类型确定。那些。&调用时根本不使用。如果使用它们,则仅用于显式转换,&仍然无法指定两个以上。例如:

    static_cast<T&&>(t);
    

    当您尝试指定更多时 - 我们会收到前面提到的“链接到链接”错误。

    那。&不允许打破 Sutter 在 c++11 中出现新引用语义的记录。

    • 8
  2. αλεχολυτ
    2020-01-09T23:16:39Z2020-01-09T23:16:39Z

    六个点......。基于与 enSO的沟通。

    我们有代码:

    template <typename T>
    struct X { };
    
    template <typename T, typename ... U>
    struct X<T(U......)> { };
    

    这里有一个结构模板,以及这个模板的部分特化,用于通过一个接受多个参数并返回 typeX的函数进行类型参数化。U......T

    U......U... ...与或相同U..., ...。U...是传递给模板的未命名类型集,后跟...C 省略号以确保传递的参数数量可变。因此,要实例化模板特化,您可以使用例如以下代码:

    X<int(double, char, ...)> x;
    

    x由返回int并接受至少 2 个参数的函数参数化:一个类型double,第二个类型char,之后可以使用任意数量的附加参数(如中printf),您需要使用头文件中的函数来访问这些参数<cstdarg>。

    当使用省略号之间没有显式逗号的选项时, clang会发出一条警告,解释其本质:

    '...' in this location creates a C-style varargs function [-Wambiguous-ellipsis]
    
    • 4

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5