1

我想使用等效的std::pair<bool, std::string>作为函数返回类型。在下游代码中,使用okandmsg代替firstandsecond访问器会更好,以避免不必要的 API 查找。而且我似乎无法使用继承正确编写它,因为std::pair没有虚拟析构函数可能会泄漏。想要避免我自己的结构作为重命名 std::pair 成员中的解决方案- 重用现有的 Move 构造函数和其他管道。有可能吗?

编辑:

经过反馈似乎是推荐的方法是:

struct res {
    bool ok;
    std::string msg;
};

res fnk() { ...; return r };

我是否正确理解 C++11 编译器期望生成移动构造函数以避免复制字符串?

4

1 回答 1

1

想要避免我自己的结构作为重命名 std::pair 成员中的解决方案- 重用现有的 Move 构造函数和其他管道。

我相信这是误解的根源:如果您编写自己的结构,编译器将为您免费生成移动构造函数和“其他管道”。

并且任何体面的编译器都应该能够进行复制省略,即在原地构造结果;没有副本,没有移动。

使用命名的内联访问器也是一种选择,特别是如果你真的需要使用std::pair; Renamed std::pair members question 和其中一个答案中也对此进行了详细说明。

在我看来,在这种情况下进行继承将是一个错误。我不会那样做的。我没有看到任何好处,但我确实看到了它的问题。

于 2013-10-18T10:54:25.790 回答