gpt4 book ai didi

c++ - 避免在 ctor 初始化列表中的字符串赋值中重复调用函数

转载 作者:太空宇宙 更新时间:2023-11-04 16:01:25 24 4
gpt4 key购买 nike

在下面的代码示例中,我想用函数的返回值(可能返回 NULL) 或 const char*。但我不喜欢 Func() 被调用两次这一事实。

#include <iostream>

const char* Func()
{
char* p = NULL;
// Assign p: may be NULL or non-NULL
return p;
}

class A
{
public:
A() : str_( Func() ? Func() : "NULL" ) {}

std::string str_;
};

int main( int argc, char* argv[] )
{
A a;
std::cout << a.str_ << std::endl;
return 0;
}

我想做这样的事情:

A() : str_( ( const char*& tmp = Func() ) ? tmp : "NULL" ) {}

但以这种方式使用临时变量——甚至引用来延长它们的生命周期——似乎是非法的(根据我目前的理解)。

是否有 C++03 语法允许在初始化列表中初始化 A::str_,只调用一次 Func(),并且没有使用全局/静态变量?如果有使用临时变量的解决方案,我想学习它的语法。

最佳答案

在 C++11 中,使用委托(delegate)构造函数

class A
{
private:
A(const char* s) str_(s ? s : "NULL") {}
public:
A() : A(Func()) {}

std::string str_;
};

在c++03中,创建一个函数助手

class A
{
private:
static const char* FuncNotNull() { const char* s = Func(); return s ? s : "NULL"); }
public:
A() : str_(FuncNotNull()) {}

std::string str_;
};

关于c++ - 避免在 ctor 初始化列表中的字符串赋值中重复调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43264748/

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