gpt4 book ai didi

c++ - 有没有办法在不创建变量的情况下调用需要指针的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:19 26 4
gpt4 key购买 nike

我有这个函数调用:

uint32_t func(uint32_t* a, uint32_t b)

我想用这样的整数文字来调用它:

func(0, b);

其中 b 是一个 uint32_t

有没有什么方法可以在不创建中间变量的情况下做到这一点?
IE。我想避免这样做:

uint32_t a = 0;
func(a, b);

最佳答案

辅助类:

struct int_ptr {
int v;

operator int *() { return &v; }
};

int foo(int *a, int b);

void bar()
{
foo(int_ptr{0}, 0);
}

这会导致构造一个临时 int_ptr 类,将其 v 成员初始化为 0。这将作为参数传递给一个接受 的函数int *,而 int_ptr 提供了一个合适的 operator * 方法,将右指针传递给函数。

这整个纸牌屋取决于 int_ptr 临时存在直到函数调用结束这一事实。您应该为助手类选择一个名称来强调这一事实。如果你总是用它来传递一个指向0的指针给foo,那么拼写出来:

struct zero_value_to_foo {
int v=0;

operator int *() { return &v; }
};

int foo(int *a, int b);

void bar()
{

foo(zero_value_to_foo{}, 0);
}

因此在其他上下文中使用它看起来非常不合适,即

int *p=zero_value_to_foo{};

这会编译,但会留下一个悬垂的指针;但希望“zero_value_to_foo”标签能给出一个提示,表明这里有问题。

您可以做的另一件小事来帮助自己避免滥用它,那就是 use a ref qualifier对于运营商:

struct zero_value_to_foo {
int v=0;

operator int *() && { return &v; }
};

有了这个,

foo(zero_value_to_foo{}, 0);

仍然编译,但不是这个:

zero_value_to_foo zero{};

foo(zero, 0);

可以做的越多,越难以使用它,除非在上下文中意味着,bug 潜伏的机会就越少。

关于c++ - 有没有办法在不创建变量的情况下调用需要指针的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50072275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com