是否可以传递char **作为参数

时间:2017-04-25 07:27:34

标签: c++

声明:Menu(const char* header_, const char* footer_, const char** options_);

定义:Menu menu(header, footer, (char**){"Option A", "Option B", "Option C", NULL});

他们的数组以红色加下划线。

2 个答案:

答案 0 :(得分:2)

  

是否可以将char **作为参数传递

你的代码被加下划线的原因(可能)是因为这段代码非常丑陋/不安全,开发人员在IDE中添加了特殊处理,以便标记这些代码。

如果是遗留代码,我很抱歉。

如果是您的代码(或者您只是有权更改它),请考虑:

  • const char**替换const std::vector<std::string>&参数(这样你会遇到很少的问题)。

  • 将其他参数替换为对std :: string实例的const引用,或者如果这更适合您的场景,则按值传递。

  • 用nullptr替换NULL(不要在新代码中使用NULL)。

  • 在C ++代码中不使用C风格的强制转换。

  • 不使用尾随下划线作为参数名称。

答案 1 :(得分:1)

    
#include <array>

Menu menu(header, footer, ::std::array< char const *, 4 >{"foo", "bar", "foobar", nullptr}.data());