数组参数的默认值

Dev*_*hen 13 c++ default-value

用C++玩一下吧.我真正想要做的是能够设置一个具有为数组或指针参数定义的默认值的函数.为了简单起见,我们只使用一个数组.像这样:

void experimentA(char a[3] = {'a', 'b', 'c'});

编译器(带有GNU99的LLVM GCC 4.2)抱怨"预期表达式".这是非常迟钝的,但同事告诉我,这种情况正在发生,因为我试图分配的'值'是静态分配的,而我试图将它赋给(a[3])的变量是auto.

但我不能完全确定是否是这种情况,因为我能够做到这一点:

void experimentB(char a[3] = "abc");

编译器只是警告我,不推荐使用string-literal到char*转换.

我不明白"abc"如何从根本上与{'a','b','c'}有所不同,以引起这种差异.任何见解都非常感谢!

joh*_*ohn 7

你的同事错了,或者你误解了.

理解的第一个线索是你不能在C或C++中将数组作为函数参数.原因是历史性的.所以当你编写void experimentA(char a[3] ...)编译器时会自动将其转换为指针,即void experimentA(char* a ...).所以真正的问题是为什么"abc"a和a的合适默认值{ 'a', 'b', 'c' }.原因是编译器解释的"abc"是一个表达式而{ 'a', 'b', 'c' }不是(它是一个初始化者).在C++中有一些地方可以使用初始化器,有些则不能.参数的默认值恰好是您不能的地方之一.