Questions tagged «ctor-initializer»

5
const引用类成员是否可以延长临时对象的寿命?
为什么这样做: #include <string> #include <iostream> using namespace std; class Sandbox { public: Sandbox(const string& n) : member(n) {} const string& member; }; int main() { Sandbox sandbox(string("four")); cout << "The answer is: " << sandbox.member << endl; return 0; } 给出以下输出: 答案是: 代替: 答案是:四

6
在构造函数初始值设定项中初始化成员数组
class C { public: C() : arr({1,2,3}) //doesn't compile {} /* C() : arr{1,2,3} //doesn't compile either {} */ private: int arr[3]; }; 我相信原因是只能使用=语法来初始化数组,即: int arr[3] = {1,3,4}; 问题 我该怎么做我想做的事情(就是在构造函数中初始化一个数组(而不是在主体中分配元素))。可能吗? C ++ 03标准是否对在ctor初始化程序中初始化聚合(包括数组)有什么特别的建议?还是上述代码的无效性是其他某些规则的必然结果? C ++ 0x初始化程序列表可以解决问题吗? PS:请不要提及向量,boost :: arrays及其对数组的优越性,我很清楚。

1
使用委托构造函数进行成员初始化
我已经开始尝试C ++ 11标准,我发现了这个问题,该问题描述了如何从同一类中的另一个ctor调用您的ctor,以避免使用init方法或类似方法。现在,我正在尝试使用类似如下的代码进行相同的操作: hpp: class Tokenizer { public: Tokenizer(); Tokenizer(std::stringstream *lines); virtual ~Tokenizer() {}; private: std::stringstream *lines; }; cpp: Tokenizer::Tokenizer() : expected('=') { } Tokenizer::Tokenizer(std::stringstream *lines) : Tokenizer(), lines(lines) { } 但这给了我错误: In constructor ‘config::Tokenizer::Tokenizer(std::stringstream*)’: /path/Tokenizer.cpp:14:20: error: mem-initializer for ‘config::Tokenizer::lines’ follows constructor delegation我尝试将Tokenizer()部分移到列表的第一和最后,但这无济于事。 这背后的原因是什么,我应该如何解决?我试着lines(lines)用this->lines = lines;代替将其移动到身体,并且效果很好。但是我真的很希望能够使用初始化列表。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.