put_money是否按值或引用保留其参数?

埃里克

以下是否调用未定义的行为?

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <experimental/iterator>

int main() {
    long double values[] = {1, 2, 3};
    std::transform(
        std::begin(values), std::end(values),
        std::experimental::make_ostream_joiner(std::cout, ", "),
        [](long double v) {
            return std::put_money(v + 1);
        }
    );
    return 0;
}

我担心的是会return std::put_money(v + 1)返回对临时目录的引用v + 1

阿特耶

标准([ext.manip] / 6)仅定义此特定表达式:

out << put_­money(mon, intl);

目前尚不确定如何mon存储,并且它有可能成为悬挂的参考并成为UB。

一个“简单”的解决方案是使您自己的类知道您存储的值:

struct money_putter {
    long double value;

    template<class charT, class traits>
    friend std::basic_ostream<charT, traits>& operator<<(std::basic_ostream<charT, traits>& os, const money_putter& mon) {
        return os << std::put_money(mon.value);
    }
};


int main() {
    int values[] = {1, 2, 3};
    std::transform(
        std::begin(values), std::end(values),
        std::experimental::make_ostream_joiner(std::cout, ", "),
        [](int i)  {
            return money_putter{i};  // or i + 1
        }
    );
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++ cout列表,其小数点使用setw(x)对齐,而不是put_money

std::bind 如何按值获取可变参数参数,即使使用其通用引用?

当const引用参数绑定到右值时,它是否保持其“状态”?

using语句是否保留对其接收的对象的引用?

函数调用后,参数指针不保留其值

开关/案例中定义的变量是否保留其值?

是否可以定义参数集并对其进行引用?

PowerShell函数参数-按引用还是按值?

C ++中的函数重载按值或按引用传递参数

复制公式,用值替换其参数中的引用

函数表达式中出现的变量是否通过引用接受参数,但按odr用过的值返回?

构造函数参数的引用成员按值传递

按引用/值的参数如何在C#中工作

保留的片段是否保留其视图?

帮助程序功能,用于检查值是否是其任何参数

是否可以在python字典中按索引引用值?

协议数组元素是否按值或引用传递?

变量不保留其值

函数调用何时复制其相对于参数序列的按值传递参数?

按引用与按值的JavaScript

函数/方法中的参数是否通过值或引用传递?

绑定是否接受传入的非POD参数的值或引用?

按值/引用解析

按引用对象与按值引用

删除右值,保留左值引用(是否提供标准类型特征?)

Array.find是否返回值或引用?我的意思是按值传递还是按引用传递?

在VB.NET中,变量在页面事务之间保留其值是否正常?

是否可以从嵌套字典中删除顶级键并保留其值?

在C#中,我应该按值传递参数并返回相同的变量,还是按引用传递?