gpt4 book ai didi

C++ std::string 构造函数

转载 作者:太空狗 更新时间:2023-10-29 19:50:51 25 4
gpt4 key购买 nike

对此有任何想法将不胜感激:

std::string s1 = "hello";
std::string s2 = std::string(s1);

我现在希望这两个字符串是独立的,即我可以将“, world”附加到 s2 并且 s1 仍将显示为“hello”。这是我在 windows 和 linux 上找到的,但在 HP_UX 机器上运行代码似乎 s2 和 s1 是相同的字符串,因此修改 s2 会更改 s1。

这听起来是不是很疯狂,有人见过类似的东西吗?

最佳答案

虽然我无法重现 OP 的确切错误,但我在 HP-UX aCC 编译器中遇到了类似的错误。我在 HP boards 上发布了它,最终得到了惠普的回应。基本上,他们的 aCC 版本 3.xx(3.70、3.73、3.67 等)搞乱了 std::string 构造。我们不得不转向编译器的 6.xx 版本。我们当时遇到的问题是没有可用于 PA-RISC 机器的 6.xx 编译器,只有 Itanium。我相信 2007 年 9 月针对 PA-RISC 发布了 6.xx 编译器。

出现问题的代码是:

#include <iostream>
#include <string>

class S : public std::string // An extension of std::string
{
public:
explicit S(const char* s)
: std::string(s)
{
}
};

class N // Wraps an int
{
public:
explicit N(int n)
: _n(n)
{}
operator S() const // Converts to a string extension
{
return _n == 0 ? S("zero") : (_n == 1 ? S("one") : S("other"));
}
private:
int _n;
};

int main(int, char**)
{
N n0 = N(0);
N n1 = N(1);

std::string zero = n0;
std::cout << "zero = " << zero << std::endl;
std::string one = n1;
std::cout << "zero = " << zero
<< ", one = " << one << std::endl;

return 0;
}

这是打印:
零=零
零 = 一,一 = 一

换句话说,从 n1 构造字符串 1 完全破坏了另一个字符串(字符串 0)。

注意事项:
要查看编​​译器的版本,请键入“aCC -V”
要查看机器类型,请键入“uname -m”(9000/800 ==> PA-RISC,ia64 ==> Itanium)

关于C++ std::string 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/189522/

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