【发布时间】:2022-01-10 13:52:15
【问题描述】:
我有以下代码:-
static char* ListOfStr[] = { "str1", "str2", "str3" };
void Foo(const char** listOfStr)
{
// do something
}
当我打电话给Foo 时;
Foo(ListOfStr);
我收到错误无法将 char** 转换为 const char** (C2664 - vc++)
我知道如何使用强制转换或其他方式解决问题,例如首先定义 const 数组。
但是使用 char** 作为 const char** 是否比它给出错误的原因更安全?
我想在传递给函数时应该有像std::string 到const std::string 这样的自动转换。只有 cont char** 到 char** 的反面必须给出没有强制转换的错误。
【问题讨论】:
-
这是因为在现代 C++ 中
"literal string"是const char *而不是char *。 -
@SamVarshavchik 错误信息似乎表明相反问题。
-
@anastaciu 这是一条非常红的鲱鱼,当然;-)
-
您可以将
Foo声明为Foo(const char* const* listOfStr),这样可以避免重复中的陷阱,因为传递的指针不再是可变的,因此您不能使用它来将 const 换成非-const.
标签: c++ pointers visual-c++ const-correctness