gpt4 book ai didi

C++:使用委托(delegate)构造函数时选择 `const char *` 与 `std::string`

转载 作者:行者123 更新时间:2023-11-30 00:44:05 25 4
gpt4 key购买 nike

考虑以下几点:

class Foo {
public:
Foo (const char *in) {
printf ("C string constructor called\n");
}
Foo (std::string const &in) : Foo(in.c_str()) {
printf ("C++ string constructor called\n");
}
};
Foo bar ("I never asked for this");
//C string constructor called

因此,常量 string 被视为 const char *

但是,如果我们将 std::string 构造函数设为“primary”,会有什么变化呢?

我们是否可以期望创建一个 std::string 对象并将其传递给相应的构造函数而不调用 C 字符串相关的构造函数?

class Foo {
public:
Foo (std::string const &in) {
printf ("C++ string constructor called\n");
}
Foo (const char *in) : Foo(std::string (in)) {
printf ("C string constructor called\n");
}
};
Foo bar ("I never asked for this");
//C++ string constructor called
//C string constructor called

同样,首先调用了 C 字符串构造函数。

这种行为是在 C++ 标准中描述的,还是与编译器相关的?

这会以同样的方式工作吗?模板还是重载函数?

我使用 GCC 7.3.0 (MSYS2 x64) 编译。

最佳答案

“我从来没有问过这个”string literalconst char 元素组成:

Foo bar ("I never asked for this"); // calls Foo (const char *in)

因此,Foo (const char *in) 将始终通过重载决议选择不管您声明的“顺序”你的构造函数。

如第二个示例所示,

Foo (const char *in) : Foo(std::string (in))

delegating constructor被选中并将调用目标构造函数,由初始化列表的唯一成员选择。

关于C++:使用委托(delegate)构造函数时选择 `const char *` 与 `std::string`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50951164/

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