【问题标题】:How can you pass an array of strings to a function as constant in C++?如何将字符串数组作为 C++ 中的常量传递给函数?
【发布时间】:2013-10-26 01:59:18
【问题描述】:

我正在做一个结构化编程作业,要求我制作一个程序,允许用户输入名字等等。将名称放入字符串数组后,我想做的是将它们打印到屏幕上。我曾希望通过将数组和其中包含的名称数量传递给一个函数来实现这一点,然后将它们打印到屏幕上。我想将数组和名称数量作为常量传递,以便保护它们,使其不能被函数修改,只是只读的。我不明白为什么我不能将 const 放在字符串数组或名称的数量之前。

void writeNames (const string namelist[], const int number_of_names)

这是我必须接受的,还是有办法可以将这两个都作为只读方式传递给函数?我可以在没有这个的情况下完成作业,所以这更像是一个好奇的问题,而不是“帮我做作业”的问题。

附:向量似乎是一种用字符串等做更多事情的方法,但我们还没有在课堂上接触到它们,因此我也不能使用它们。

谢谢

【问题讨论】:

  • 为什么不能在数组前使用const
  • 包含“const”时遇到什么错误?
  • 为什么不允许你使用课堂上没有讨论过的东西?这似乎很愚蠢。
  • error: expected primary-expression before 'const' 我做错的是将'const'修饰符放在函数 call 的参数列表中,而我应该将它放在函数原型中并且而是函数头。对吗?

标签: c++ arrays string constants


【解决方案1】:

没有看到你在函数中做了什么,很难回答这个问题,但我的水晶球说你可能正在做一些可能修改你方法中的参数之一的事情,所以编译器抱怨因为你声明了参数 const。

作为一个例子,这样的事情就可以了:

void writeNames(const std::string namelist[], const int number_of_names)
{
    for(int i = 0; i < number_of_names; i++) {
        std::cout << namelist[i] << std::endl;
    }
}

但是,这样的事情会导致编译器错误,因为您正在更改其中一个变量:

void writeNames(const std::string namelist[], const int number_of_names)
{
    while(number_of_names--) {   // <-- We're modifying a const value here
        std::cout << namelist[count] << std::endl;
    }
}

顺便说一句,将 const 修饰符放在“number_of_names”参数上有点多余,因为您是按值传递参数,因此更改函数中的值不会影响调用函数中输入参数的值.但是,数组中任何字符串的更改都会反映在调用函数中,因此此处的 const 修饰符是有意义的。通常,您只会在作为指针或通过引用传入的参数上使用 const。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 2017-04-05
    • 2019-03-18
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多