C++11 では、コンストラクターを初期化リスト内の別のコンストラクターに転送できます。
この質問のように、初期化リストで関数を呼び出しても問題ありません
コンストラクターデリゲートで関数を呼び出しても問題ありませんか?
私はこのようなコードを試しました:
#include <iostream>
#include <string>
#include <yaml-cpp/yaml.h>
using namespace std;
YAML::Node ParseFromFile(const string& filepath) {
YAML::Node yaml;
try {
return YAML::LoadFile(filepath);
} catch(const YAML::BadFile& e) {
cout << "error";
}
}
class A {
public:
A(YAML::Node yaml) {
cout << "Got" << endl;
}
A(const string& filepath) : A(ParseFromFile(filepath)) {}
};
int main(int argc, char** argv) {
A a(string(argv[1]));
YAML::Node yaml = ParseFromFile(string(argv[1]));
A b(yaml);
return 0;
}
上記のコードでは、空のファイルを渡すだけで、b の初期化中に "Got" が 1 つだけ出力されます。
================================================== =====================
string(argv[1]) を argv[1] に置き換えると機能しますが、その理由は何ですか?