【发布时间】:2022-01-15 01:12:57
【问题描述】:
TLDR;
如何有条件地初始化const char* []?
const char* arr[] = (some_condition ? {"ta", "ta"} : {"wo", "lo", "lu"});
错误:“{”标记(...)之前的预期主表达式
错误:在“{”标记(...)之前应为“:”
错误:“{”标记(...)之前的预期主表达式
错误:从‘char**’到‘const char**’的无效转换[-fpermissive]
详情
我正在使用以const char* argv[] 作为输入的外部 api。基于存储在更健全的数据结构中的变量,例如std::string,我构造了这个输入变量,但我显然无法正确地这样做。
说实话,问题的根源归结为一个可选的麻烦参数。以下作品(有点)..
bool use_optional = false;
std::string optional = "blah";
const char* arr[] = {
"arg1",
(use_optional ? optional.c_str() : ""),
"arg3"
};
这个解决方案的问题是我在arr 中得到一个空条目,即{"arg1", "", "arg3"},我非常想避免这种情况。
【问题讨论】:
-
由于需要在编译时知道数组的大小,因此您不能这样做。您需要动态分配一个数组(例如:通过
std::vector<const char*>) -
条件表达式的结果表达式必须是同一类型。
-
感谢您的反馈,非常感谢。
标签: c++ arrays c++11 conditional-operator