C++ 类型强制转换函数的参数

C++ 类型强制转换函数的参数,c++,C++,如果代码如下所示 void func(std::string str) { ... } void main() { std::string p1 = "abcd"; char p2[SOME_LENGTH] = "abcd"; func(p1); // (1) func(p2); // (2) } 哪种方法在(1)和(2)之间有效?它们同样有效/低效。两者都涉及复制字符串并将副本用作参数“str”的值。更好的方法是将func声明为 void func

如果代码如下所示

void func(std::string str)
{
    ...
}

void main()
{
    std::string p1 = "abcd";
    char p2[SOME_LENGTH] = "abcd";

    func(p1); // (1)
    func(p2); // (2)
}

哪种方法在(1)和(2)之间有效?

它们同样有效/低效。两者都涉及复制字符串并将副本用作参数“str”的值。更好的方法是将func声明为

void func(const std::string &str) {
}

这样可以避免复制字符串。

func(“abcd”)
在什么意义上是最有效的?
main
必须具有
int
的返回类型。这可能效率较低,具体取决于
func
对字符串的处理方式。例如,如果
func
打算修改字符串的副本。对不起,我应该提到func()中的'str'没有更改。