当前位置:  开发笔记 > 编程语言 > 正文

将字符串推回到对象的向量

如何解决《将字符串推回到对象的向量》经验,为你挑选了2个好方法。

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

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

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

    std::vector 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



1> songyuanyao..:

Foo有一个非显式的ctor,它接受一个类型的参数std::string(即转换构造函数),这意味着它可以隐式地从a中转换出来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 explicit,则会禁止隐式转换.

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



2> dfri..:

第一次回退将自动初始化Foo给定string对象的对象; 通过初始化列表.

(期望一个Foo对象,获取一个字符串:可以Foo用一个字符串初始化一个对象吗?是的,它的初始化列表有单个元素,并且该对象是从该元素初始化的).

有关详细信息,请参阅:

http://en.cppreference.com/w/cpp/language/initializer_list


初始化列表不应该很重要.没有它仍然会编译.
推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有