默认情况下,是否有任何功能可以正常工作 升迁::变体< /COD>或 Boo::可选的< /Cord>返回值到信号失败。一般提示:明确输出是什么,而不是将其作为引用参数。”code>object do\u something(object const&input)更清晰,而不是返回void。重新执行void将表明此功能仅具有副作用。什么是“就地操作”以及该功能如何接受它?@tilart您的意思是不返回void?为什么您会引入滥用功能的机会,并请求帮助诊断此问题,而不是用最直接的方法:让函数返回输出。毕竟,这是一个函数真正被定义的。@返回错误代码的@ HuMaHalfFi函数使用一个不应该在C++中遵循的旧样式,它只适用于不知道异常和复合返回值的语言。在C++中,你使用异常或类似的代码::/>代码>或代码> Boo::可选的< /Cord>返回值,以指示信号失败……并且总是,总是,总是有文档清楚地说明什么是允许的,什么不是….. @ MyDrIt文档是好的,但是在类型系统中编码相同的信息更好。康拉德·鲁道夫,两者兼而有之是最好的。。。而且总是,总是,总是有文档清楚地说明什么是允许的,什么是不允许的。@mindriot文档很好,但在类型系统中编码相同的信息更好。;-)@康拉德·鲁道夫,两者兼而有之是最好的

默认情况下,是否有任何功能可以正常工作 升迁::变体< /COD>或 Boo::可选的< /Cord>返回值到信号失败。一般提示:明确输出是什么,而不是将其作为引用参数。”code>object do\u something(object const&input)更清晰,而不是返回void。重新执行void将表明此功能仅具有副作用。什么是“就地操作”以及该功能如何接受它?@tilart您的意思是不返回void?为什么您会引入滥用功能的机会,并请求帮助诊断此问题,而不是用最直接的方法:让函数返回输出。毕竟,这是一个函数真正被定义的。@返回错误代码的@ HuMaHalfFi函数使用一个不应该在C++中遵循的旧样式,它只适用于不知道异常和复合返回值的语言。在C++中,你使用异常或类似的代码::/>代码>或代码> Boo::可选的< /Cord>返回值,以指示信号失败……并且总是,总是,总是有文档清楚地说明什么是允许的,什么不是….. @ MyDrIt文档是好的,但是在类型系统中编码相同的信息更好。康拉德·鲁道夫,两者兼而有之是最好的。。。而且总是,总是,总是有文档清楚地说明什么是允许的,什么是不允许的。@mindriot文档很好,但在类型系统中编码相同的信息更好。;-)@康拉德·鲁道夫,两者兼而有之是最好的,c++,c++11,in-place,C++,C++11,In Place,例如: void do_somthing(object const& input, object& output); int main(){ object a; object b; do_somthing(a, b);//OK do_somthing(a, a);//wrong } 如果可以的话,我该怎么说呢?例如,我应该放一个断言吗?抛出异常?只要把它放在文档中,如果有人坚持要调用它,就让它产生未定义的行为 一些澄清: 在OpenCV库中,像cv::

例如:

void do_somthing(object const& input, object& output);

int main(){
   object a;
   object b;
   do_somthing(a, b);//OK
   do_somthing(a, a);//wrong
}
如果可以的话,我该怎么说呢?例如,我应该放一个断言吗?抛出异常?只要把它放在文档中,如果有人坚持要调用它,就让它产生未定义的行为

一些澄清:

在OpenCV库中,像
cv::Canny
这样的函数可以像这样工作:

cv::Canny(img,img,100,200);

但是,
cv::warpAffine
不能像文档中所写的那样使用它。

一般来说,识别此类函数的正确方法是让它们返回输出值:

object do_somthing(object const& input);
如果不能让它们返回输出值,而必须使用输出参数,则
do\u something
应该:

  • 执行就地操作

  • 断言(&input!=&output)
    或引发异常


  • 也就是说,如果您不能处理就地操作,那么立即对它们进行失败处理。在这些情况下,最好在函数声明的注释中非常明确地记录这一事实。

    一般来说,识别这些函数的正确方法是让它们返回输出值:

    object do_somthing(object const& input);
    
    如果不能让它们返回输出值,而必须使用输出参数,则
    do\u something
    应该:

  • 执行就地操作

  • 断言(&input!=&output)
    或引发异常


  • 也就是说,如果您不能处理就地操作,那么立即对它们进行失败处理。在这些情况下,请非常明确地记录这一事实,最好是在函数声明的注释中。

    您始终可以自己执行该检查,例如:

       void do_somthing(object const& input, object& output) {
           if (&input == &output) { // error
    
    当然,如果您可以更改函数的签名并返回更改后的值,您可以避免开销,只需遵循tillaert的建议:

     object do_somthing(object const& input) {
    

    您始终可以自己执行该检查,例如:

       void do_somthing(object const& input, object& output) {
           if (&input == &output) { // error
    
    当然,如果您可以更改函数的签名并返回更改后的值,您可以避免开销,只需遵循tillaert的建议:

     object do_somthing(object const& input) {
    

    一般提示:明确您的输出是什么,而不是将其作为引用参数传递
    object do\u something(object const&input)
    更清晰,而不是返回
    void
    。重新执行
    void
    将表明此功能仅具有副作用。什么是“就地操作”以及该功能如何接受它?@tilart您的意思是不返回void?为什么您会引入滥用功能的机会,并请求帮助诊断此问题,而不是用最直接的方法:让函数返回输出。毕竟,这是一个函数真正被定义的。@返回错误代码的@ HuMaHalfFi函数使用一个不应该在C++中遵循的旧样式,它只适用于不知道异常和复合返回值的语言。在C++中,使用异常或类似于“代码>升迁::变体< /COD>或<代码> Boo::可选的< /Cord>返回值到信号失败。一般提示:明确输出是什么,而不是将其作为引用参数。”code>object do\u something(object const&input)更清晰,而不是返回
    void
    。重新执行
    void
    将表明此功能仅具有副作用。什么是“就地操作”以及该功能如何接受它?@tilart您的意思是不返回void?为什么您会引入滥用功能的机会,并请求帮助诊断此问题,而不是用最直接的方法:让函数返回输出。毕竟,这是一个函数真正被定义的。@返回错误代码的@ HuMaHalfFi函数使用一个不应该在C++中遵循的旧样式,它只适用于不知道异常和复合返回值的语言。在C++中,你使用异常或类似的代码:<代码>:/>代码>或代码> Boo::可选的< /Cord>返回值,以指示信号失败……并且总是,总是,总是有文档清楚地说明什么是允许的,什么不是….. @ MyDrIt文档是好的,但是在类型系统中编码相同的信息更好。康拉德·鲁道夫,两者兼而有之是最好的。。。而且总是,总是,总是有文档清楚地说明什么是允许的,什么是不允许的。@mindriot文档很好,但在类型系统中编码相同的信息更好。;-)@康拉德·鲁道夫,两者兼而有之是最好的