gpt4 book ai didi

C++ string() 与 c 字符串的比较。为什么这行得通?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:26:00 24 4
gpt4 key购买 nike

因此这段代码用于以任意随机顺序输入的命令输入,它将返回输入后的值。 Amt_Range 是一个数字检查函数。

为什么会这样。由于指针比较,它应该能够。??

更重要的是 string() 做了什么。以我有限的理解,比较应该不起作用,因为 c 样式字符串的形式为 '-' 't'。提前致谢!!

int main(int argc, const char *argv[]) {

string dummy;
int tests = 0, quizzes = 0, assignments = 0, labs = 0, fin = 0;
int testweight = 0, quizweight = 0, assignweight = 0, labweight = 0, finweight = 0;
int counter = 1;

if (argv[counter] == string("-t")) {
dummy = argv[counter + 1];
tests = Amt_Range(dummy, "tests");
counter+=2;

} else if (argv[counter] == string("-q")) {
dummy = argv[counter + 1];
quizzes = Amt_Range(dummy, "quizzes");
counter+=2;


} else if (argv[counter] == string("-a")) {
dummy = argv[counter + 1];
assignments = Amt_Range(dummy, "assignments");
counter+=2;


} else if (argv[counter] == string("-l")) {
dummy = argv[counter + 1];
labs = Amt_Range(dummy, "labs");
counter+=2;


} else if (argv[counter] == string("-f")) {
dummy = argv[counter + 1];
fin = Amt_Range(dummy, "whether there is a final");
counter+=2;

} else {
cout << "wrong input NOW START OVER" << endl;
exit(EXIT_FAILURE);

}
}

最佳答案

启动的 operator==() 重载是 std 命名空间中的一个免费函数。

namespace std { 
bool operator==(std::string const&, std::string const&);
}

它采用 const& 的第一个参数,这意味着欢迎使用临时变量。

使用隐式 转换构造函数 std::string(char const*) 恰好可以创建临时对象。因此,重载适用。

UPDATE As uncovered in the comments, the standard actually declares

      bool operator==(const char*, std::string const&);

as an optimization in §21.4.8.2 operator==. However, the implicit conversion on the LHS is good to know about because it's a key ingredient in the language design with respect to operator overload (resolution)


现在,重载 bool std::operator==(std::string const&, std::string const&) 甚至在重载解析期间被发现的原因有点微妙。这种机制称为参数相关查找。

在这种情况下,ADL 起作用是因为第二个参数已经是 std::string,它具有在 std 命名空间中声明的类型。因此,在这个命名空间中搜索候选 operator== 重载


免责声明:

我已经简化了上面的内容。实际上,标准库中的代码更加通用,并且可能看起来更像

namespace std { 
template <typename Char, typename CharTraits, typename Alloc>
bool operator==(std::basic_string<Char, CharTraits, Alloc> const&, std::basic_string<Char, CharTraits, Alloc> const&) {
// implementation...
}
}

关于C++ string() 与 c 字符串的比较。为什么这行得通?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27028797/

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