gpt4 book ai didi

c++ - 链接类构造函数时的范围问题

转载 作者:行者123 更新时间:2023-11-30 04:18:18 26 4
gpt4 key购买 nike

为什么以下在链接构造函数时不起作用:

#include <iostream>
#include <vector>

class cls {
public:
cls() {cls(5);} // want to resize v to 5
cls(int n) {v.resize(n);}
std::vector<int> v;
};

int main(int argc, const char* argv[]) {
cls x, y(5);
std::cout << x.v.size() << std::endl; // prints 0 <- expected 5
std::cout << y.v.size(); // prints 5
return 0;
}

演示:http://ideone.com/30UBzS

我希望两个对象都有一个大小为 5 的 v。怎么了?

我想这样做的原因是因为编写单独的 cls()cls(n) 构造函数会重复很多代码。

最佳答案

cls::cls() 构造函数中调用 cls(5); 并没有按照您的预期进行。它使用第二个 cls 构造函数创建一个临时变量,该构造函数在 ; 处销毁。

您可以使用 C++11 的委托(delegate)构造函数来实现您想要的:

cls() : cls(5) { }

如果您没有支持 C++11 的编译器,您可以将公共(public)初始化提取到另一个函数中,并让两个构造函数都调用它:

class cls {
public:
cls() { init(5); }
cls(int n) { init(n); }
std::vector<int> v;
private:
void init(int n) { v.resize(n); }
};

关于c++ - 链接类构造函数时的范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500053/

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