【问题标题】:Is it possible to pass a pointer to a literal? [duplicate]是否可以将指针传递给文字? [复制]
【发布时间】:2018-05-25 21:03:11
【问题描述】:

想象一下我们有:

void foo(int *num){}

而且我们知道我们总是将 5 作为参数传递,然后可以这样做:

int var = 5;
foo(&var);

有没有什么语法可以避免显式变量声明?

本质上是这样的:

foo(&(5));

【问题讨论】:

  • 为什么要这样做?写void foo(int const& num)
  • 相关:stackoverflow.com/questions/9116513/…。试图找到更好的欺骗目标
  • 地址的字面意思是什么?更糟糕的是,如果您尝试修改存储在那里的值会发生什么?
  • 函数不是我写的,它是一个驱动函数,所以我不能按我的意愿写
  • 如果指针不是const,则驱动程序很有可能打算写入指向的对象。

标签: c++ pointers methods syntax literals


【解决方案1】:

您只能获取lvalue 的地址。文字是纯右值,而不是左值,因此您不能获取文字的地址。从概念上讲,不需要像 5 这样的文字来拥有任何存储空间,如果没有某种形式的存储空间,就没有地址。

不过,您可以将其传递给const int &

void foo(const int &) {}

int main()
{
    foo(5);
}

【讨论】:

  • 不过,您可以将它传递给 const int & 为什么要这样呢? void foo(int) 做同样的事情
  • 函数声明不是我写的,是驱动函数,无法修改。
  • 这不是 lambda 变量吗?
  • @NathanOliver 我想不出你想要这样做而不是按价值取值的场景。在编写 OP 试图做什么时,我并不清楚,但我觉得通过 const 引用是最接近最初提供的代码的东西,同时仍然是合法的 c++。
猜你喜欢
  • 2014-07-12
  • 2021-05-08
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多