使用 std::optional 通过引用将 std::vector<int> 传递给函数
Use of std::optional to pass a std::vector<int> to a functional by reference
我不清楚通过引用将可选的整数向量传递给函数的正确代码是否是:
void test_func(std::optional<std::vector<int>&> vec)
或
void test_func(std::optional<std::vector<int>>& vec)
非常感谢任何帮助。
可选的参考文献是not part of the standard library at the moment。
原则上两者都有道理。
void test_func(std::optional<std::vector<int>&> vec)
这里的std::optional
是按值传递的(复制),里面的引用也是。复制引用意味着它仍然指向旧对象。这可能会产生意外行为,因为 std::optional
的两个实例指向同一个 std::vector
.
void test_func(std::optional<std::vector<int>>& vec)
这里的std::optional
是通过引用传递的。您正在访问已传递的相同选项,不会发生任何复制。
第二个 更直观恕我直言,目前在 STL 中可用,因此更可取。
非拥有指针是可为空的引用类型。
void test_func(std::vector<int>* vec)
据我所知,这在标准中是不可能的,因为人们尚未就赋值的效果达成一致。
您想要实现的功能可以通过库功能实现:
void test_func(std::optional<std::reference_wrapper<std::vector<int>>> vec)
我不清楚通过引用将可选的整数向量传递给函数的正确代码是否是:
void test_func(std::optional<std::vector<int>&> vec)
或
void test_func(std::optional<std::vector<int>>& vec)
非常感谢任何帮助。
可选的参考文献是not part of the standard library at the moment。
原则上两者都有道理。
void test_func(std::optional<std::vector<int>&> vec)
这里的std::optional
是按值传递的(复制),里面的引用也是。复制引用意味着它仍然指向旧对象。这可能会产生意外行为,因为 std::optional
的两个实例指向同一个 std::vector
.
void test_func(std::optional<std::vector<int>>& vec)
这里的std::optional
是通过引用传递的。您正在访问已传递的相同选项,不会发生任何复制。
第二个 更直观恕我直言,目前在 STL 中可用,因此更可取。
非拥有指针是可为空的引用类型。
void test_func(std::vector<int>* vec)
据我所知,这在标准中是不可能的,因为人们尚未就赋值的效果达成一致。
您想要实现的功能可以通过库功能实现:
void test_func(std::optional<std::reference_wrapper<std::vector<int>>> vec)