gpt4 book ai didi

c++ - 一个库 "misbehaved",引用传递,不应该编译,为什么编译了?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:27 26 4
gpt4 key购买 nike

我正在使用 yaml-cpp,一个 yaml 解析库,我快要疯了,因为我的 yaml 文档没有被完全解析。结果证明这是因为构造函数应该被赋予一个引用,而不是一个对象。

错误的代码:

ifstr;
YAML::Parser parser(ifstream("items9.yml"));

正确的代码:

ifstream ifstr("items9.yml");
YAML::Parser parser(ifstr);

有人告诉我它不应该编译,我正在使用 visual C++ 10。这是正常行为吗我应该注意它,还是库设计错误或 visual C++ 错误地接受了代码?

最佳答案

这是 VS 中的一个已知问题,它(与标准不同)允许将非常量引用绑定(bind)到右值。同样可以用这段代码进行测试:

struct test {};
test f() { return test(); }
int main() {
test & r = f(); // Should be an error
}

关于c++ - 一个库 "misbehaved",引用传递,不应该编译,为什么编译了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9878897/

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