Tag: ctor initializer

使用委托构造函数的成员初始化

我已经开始尝试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()第一个和最后一个名单,但没有帮助。 这是什么原因,我应该如何解决? 我已经尝试使用this->lines = lines;将lines(lines)移动到主体this->lines = lines; 相反,它工作正常。 但我真的很想能够使用初始化列表。 提前致谢!

如何在构造函数中初始化一个常量字段?

想象一下,我有一个C ++类Foo和一个类Bar,必须使用构造函数创build一个Foo指针,并且该指针在Bar实例生命周期中保持不变。 什么是正确的做法呢? 事实上,我以为我可以写下面的代码,但它不编译.. class Foo; class Bar { public: Foo * const foo; Bar(Foo* foo) { this->foo = foo; } }; class Foo { public: int a; }; 任何build议是值得欢迎的。

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; } 给出输出: 答案是: 代替: 答案是:四

这是什么奇怪的冒号成员(“:”)在构造函数中的语法?

最近我见过一个例子如下: #include <iostream> class Foo { public: int bar; Foo(int num): bar(num) {}; }; int main(void) { std::cout << Foo(42).bar << std::endl; return 0; } 这是什么奇怪的: bar(num)是什么意思? 它似乎似乎初始化成员variables,但我从来没有见过这种语法。 它看起来像一个函数/构造函数调用,但为int ? 对我来说没有意义。 也许有人可以启发我。 顺便说一下,还有没有其他的深奥的语言function,你永远不会find一个普通的C + +书?