gpt4 book ai didi

c++ - 是否可以指定一个空的 std::vector 作为默认参数?

转载 作者:IT老高 更新时间:2023-10-28 22:10:11 25 4
gpt4 key购买 nike

我一直在阅读 this similar question并且发现自己对这些 react 不太满意。我没有一个名为“foo”的简单函数;我有一个更复杂的函数,如果没有明智地提供参数,它就会非常危险。对我来说,执行自己的规则并确保系统稳健性的功能似乎比倾向于坚持“一个功能,一件事要做”的语义细节更可取。我认为对该问题的受欢迎回答反射(reflect)了编程理想主义走得太远,而不是某些情况的现实。

我面对的是:

void DoSomethingVeryComplex( const CRect bounds, CPoint startPoint = CPoint(-1,-1) );

现在这恰好满足语义规则 - 它正在做某件事,而不是几件事。它正在做的一件事恰好是复杂的、多阶段的,但它仍然是一件事。

对于那个复杂的东西,建议用户提供边界,让函数确定自己的起点。高级用户可能想要做大量的数学运算来确定一个特定的替代起点并提供它……但用户要小心。

现在我发现,在极少数情况下,提供多个起点而不是一个起点是有意义的。这并没有改变所涉及的过程的语义概念,因为该过程是从一个点传播到邻居、邻居的邻居等等的过程。所以从多点出发是一种自然的延伸。

因此,我更愿意指定:

void DoSomethingVeryComplex( const CRect bounds,
const std::vector<CPoint> startPoint /* = empty" */ );

这样,如果 vector 为空,函数就和之前一样确定起点,如果 vector 中有任何点,则将它们用作起点。

是否有可用的 C++ 语法允许我执行此操作 - 将空数组指定为默认参数?

最佳答案

在 C++11 中,这是最简单的:

const std::vector<CPoint> startPoint = {}

在此之前,这将起作用:

const std::vector<CPoint> startPoint = std::vector<CPoint>()

这两个都调用默认构造函数,它创建一个空 vector 。请注意,同样的语法也可以用于调用其他构造函数,只要您填写适当的参数即可。

//this one has 5 default-constructed CPoints
const std::vector<CPoint> startPoint = std::vector<CPoint>(5)

在 C++11 中,你甚至可以填写一个默认 vector :

const std::vector<CPoint> startPoint = {CPoint(1, 2), CPoint(4, 5), CPoint(3, 9)}

如果您想为自己的类(class)提供这种功能,here's a link on how it works .

关于c++ - 是否可以指定一个空的 std::vector 作为默认参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10609883/

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