gpt4 book ai didi

c++ - 将字符串推回对象 vector

转载 作者:可可西里 更新时间:2023-11-01 17:03:29 25 4
gpt4 key购买 nike

我正在浏览我为学校项目编写的一些代码,仔细检查后我觉得这些代码很奇怪。我有一个类似于下面的类:

class Foo {
public:
Foo(std::string s) : _s(s) {}
private:
std::string _s;
};

int main() {
std::string str = "Hiyo";

std::vector<Foo> f;
f.push_back(str); // Compiles. Weird to me though.
f.push_back(Foo(str)); // Predictably, this compiles as well.

return 0;
}

为什么第一次调用 push_back 是一个有效的语句,即使 str 不是 Foo

最佳答案

Class Foo 有一个非显式构造函数,接受一个类型为 std::string 的参数(即 Converting constructor ),这意味着它可以从一个std::string.

f.push_back(str);      // implicit casting from std::string to Foo
f.push_back(Foo(str)); // explicit casting from std::string to Foo

请注意,如果您使 ctor 显式,则将禁止隐式转换。

class Foo {
public:
explicit Foo(std::string s) : _s(s) {}
// ~~~~~~~~
private:
std::string _s;
};

然后

f.push_back(str);      // invalid now
f.push_back(Foo(str)); // still valid

关于c++ - 将字符串推回对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34540324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com