如何使用三元运算符有条件地初始化 const char* arr[]
How to conditionally init const char* arr[] with ternary operator
TLDR;
如何有条件地初始化一个 const char* []
?
const char* arr[] = (some_condition ? {"ta", "ta"} : {"wo", "lo", "lu"});
error: expected primary-expression before ‘{’ token (...)
error: expected ‘:’ before ‘{’ token (...)
error: expected primary-expression before ‘{’ token (...)
error: invalid conversion from ‘char**’ to ‘const char**’ [-fpermissive]
详情
我正在使用一个外部 api,它将 const char* argv[]
作为输入。基于存储在更健全的数据结构中的变量,比如 std::string
,我构造了这个输入变量,但我显然无法正确地做到这一点。
老实说,问题的根源归结为一个可选的麻烦参数。以下作品(有点)..
bool use_optional = false;
std::string optional = "blah";
const char* arr[] = {
"arg1",
(use_optional ? optional.c_str() : ""),
"arg3"
};
此解决方案的问题是我在 arr
中得到一个空条目,即 {"arg1", "", "arg3"}
,我非常想避免这种情况。
作为解决方法,您可以创建 2 个不同的数组,并在它们之间切换:
const char* arr1[] = {"ta", "ta"};
const char* arr2[] = {"wo", "lo", "lu"};
auto arr = some_condition ? arr1 : arr2;
另一种可能是使用向量:
std::vector<const char*> varr;
varr.push_back("arg1");
if (use_optional) varr.push_back(optional.c_str()),
varr.push_back("arg3");
auto arr = &varr[0];
TLDR;
如何有条件地初始化一个 const char* []
?
const char* arr[] = (some_condition ? {"ta", "ta"} : {"wo", "lo", "lu"});
error: expected primary-expression before ‘{’ token (...)
error: expected ‘:’ before ‘{’ token (...)
error: expected primary-expression before ‘{’ token (...)
error: invalid conversion from ‘char**’ to ‘const char**’ [-fpermissive]
详情
我正在使用一个外部 api,它将 const char* argv[]
作为输入。基于存储在更健全的数据结构中的变量,比如 std::string
,我构造了这个输入变量,但我显然无法正确地做到这一点。
老实说,问题的根源归结为一个可选的麻烦参数。以下作品(有点)..
bool use_optional = false;
std::string optional = "blah";
const char* arr[] = {
"arg1",
(use_optional ? optional.c_str() : ""),
"arg3"
};
此解决方案的问题是我在 arr
中得到一个空条目,即 {"arg1", "", "arg3"}
,我非常想避免这种情况。
作为解决方法,您可以创建 2 个不同的数组,并在它们之间切换:
const char* arr1[] = {"ta", "ta"};
const char* arr2[] = {"wo", "lo", "lu"};
auto arr = some_condition ? arr1 : arr2;
另一种可能是使用向量:
std::vector<const char*> varr;
varr.push_back("arg1");
if (use_optional) varr.push_back(optional.c_str()),
varr.push_back("arg3");
auto arr = &varr[0];