在C ++中,我可以声明引用以表明没有任何东西可以对其进行修改吗?

欧文

如果我做

typedef void Cb();

int foo(int const& a, Cb cb) {
  int x = a;
  cb();
  return x - a;
}

并用编译g++ -O3 -save-temps -c foo.cpp,我看到减法被保留,而如果cb();将其注释掉,整个函数将优化为

xorl    %eax, %eax

我可以对参数的说明做些什么,a以便无论对的调用如何,都将对减法进行优化cb(),而不必强制a成为唯一的引用(即,可以在其他地方引用,但不能通过任何方式引用)这些参考文献将被修改)?

pepper_chico

__restrict扩展名,您可以在gcc.godbolt.org尝试

typedef void Cb();

int foo(const int & __restrict a, Cb cb) {
  int x = a;
  cb();
  return x - a;
}

奇怪的是,只有clang进行了优化,而gcc却没有进行优化


注意,类似限制的别名被认为是C ++标准的一部分:

也许将来您可以按照标准进行操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中实现小数。可以对其进行修改以支持重复小数吗?

来自分类Dev

C ++:此模式是否有名称,可以对其进行改进吗?

来自分类Dev

C#我可以对活动窗口下的所有内容进行截图吗?

来自分类Dev

OpenGL + GLU + C ++没有画任何东西

来自分类Dev

在Turbo C ++中,可以将普通的递归函数转换为尾递归以对其进行优化吗?

来自分类Dev

在Turbo C ++中,可以将普通的递归函数转换为尾递归以对其进行优化吗?

来自分类Dev

有没有一种方法可以对列表中的颜色元素进行排序(C#)?

来自分类Dev

是否有任何C ++库可以对flv视频进行编码?

来自分类Dev

我可以在C ++中全局声明类对象吗?

来自分类Dev

我可以在C ++中全局声明类对象吗?

来自分类Dev

GCC可以警告我有关修改C99中的const字段的问题吗?

来自分类Dev

Linux C套接字UDP服务器。select()没有收到任何东西

来自分类Dev

我可以在C ++中获取具有成员变量地址的对象的引用吗?

来自分类Dev

(C ++)如果我在类中声明了某些私有内容,但是可以通过类的公共方法对其进行更改,那么为什么还要将其声明为私有呢?

来自分类Dev

我可以在 C 中对复数结构进行代数求和吗?

来自分类Dev

我可以在Unity C#中在没有photonView的对象之间发送消息吗?

来自分类Dev

在C ++中,函数的调用者可以确保其参数不会被修改吗?

来自分类Dev

在C ++中,函数的调用者可以确保其参数不会被修改吗?

来自分类Dev

我可以使startActivityForResult()不返回任何东西吗?

来自分类Dev

我可以为 x 放任何东西吗

来自分类Dev

如果我的课没有继承任何东西,为什么我可以覆盖Equals方法?

来自分类Dev

在C#中为什么我可以将接口转换为任何类型而没有编译器错误

来自分类Dev

seaborn 中是否有任何东西可以帮助我更好地打印名称?

来自分类Dev

我们可以在C中的#define指令中声明变量吗?

来自分类Dev

我可以对C#中的两个不同事件使用相同的局部变量吗?

来自分类Dev

我可以对C#中的两个不同事件使用相同的局部变量吗?

来自分类Dev

C#nameof运算符可以引用没有实例的实例属性吗?

来自分类Dev

除了&var = var类型以外,还有什么方法可以在C ++中声明引用?

来自分类Dev

我的计算器没有放任何东西,没有在任何测试中给出错误吗?

Related 相关文章

  1. 1

    在C#中实现小数。可以对其进行修改以支持重复小数吗?

  2. 2

    C ++:此模式是否有名称,可以对其进行改进吗?

  3. 3

    C#我可以对活动窗口下的所有内容进行截图吗?

  4. 4

    OpenGL + GLU + C ++没有画任何东西

  5. 5

    在Turbo C ++中,可以将普通的递归函数转换为尾递归以对其进行优化吗?

  6. 6

    在Turbo C ++中,可以将普通的递归函数转换为尾递归以对其进行优化吗?

  7. 7

    有没有一种方法可以对列表中的颜色元素进行排序(C#)?

  8. 8

    是否有任何C ++库可以对flv视频进行编码?

  9. 9

    我可以在C ++中全局声明类对象吗?

  10. 10

    我可以在C ++中全局声明类对象吗?

  11. 11

    GCC可以警告我有关修改C99中的const字段的问题吗?

  12. 12

    Linux C套接字UDP服务器。select()没有收到任何东西

  13. 13

    我可以在C ++中获取具有成员变量地址的对象的引用吗?

  14. 14

    (C ++)如果我在类中声明了某些私有内容,但是可以通过类的公共方法对其进行更改,那么为什么还要将其声明为私有呢?

  15. 15

    我可以在 C 中对复数结构进行代数求和吗?

  16. 16

    我可以在Unity C#中在没有photonView的对象之间发送消息吗?

  17. 17

    在C ++中,函数的调用者可以确保其参数不会被修改吗?

  18. 18

    在C ++中,函数的调用者可以确保其参数不会被修改吗?

  19. 19

    我可以使startActivityForResult()不返回任何东西吗?

  20. 20

    我可以为 x 放任何东西吗

  21. 21

    如果我的课没有继承任何东西,为什么我可以覆盖Equals方法?

  22. 22

    在C#中为什么我可以将接口转换为任何类型而没有编译器错误

  23. 23

    seaborn 中是否有任何东西可以帮助我更好地打印名称?

  24. 24

    我们可以在C中的#define指令中声明变量吗?

  25. 25

    我可以对C#中的两个不同事件使用相同的局部变量吗?

  26. 26

    我可以对C#中的两个不同事件使用相同的局部变量吗?

  27. 27

    C#nameof运算符可以引用没有实例的实例属性吗?

  28. 28

    除了&var = var类型以外,还有什么方法可以在C ++中声明引用?

  29. 29

    我的计算器没有放任何东西,没有在任何测试中给出错误吗?

热门标签

归档