提问人:domdrag 提问时间:2/26/2023 最后编辑:Jan Schultkedomdrag 更新时间:9/9/2023 访问量:122
std::string {} = “hi”;诱导临时物化?
Does std::string {} = "hi"; induce temporary materialization?
问:
动机是什么 表达式 std::string {} = “...”意味 着?;
左手边是否会引起临时物化,如果确实如此,它属于下面提到的哪些场景?std::string {} = "hi";
在以下情况下会发生临时物化:
- 1- 将引用绑定到 PR值时;
- 2- 当对类 prvalue 执行成员访问时;
- 3-执行数组到指针转换时 或对数组 prvalue 进行下标;
- 4- 从 braced-init-list 初始化 std::initializer_list 类型的对象时;
- 5- 当 typeID 应用于 prvalue 时
- 6- 当 sizeof 应用于 prvalue 时
- 7- 当 PR值显示为丢弃值时 表达。
我希望这会导致临时的物化,因为我们创建了一个临时的对象,但找不到哪种场景适合这里。std::string {}
答:
3赞
T.C.
2/26/2023
#1
表达式(在重载解析后)转换为 [over.match.oper]/2,此时临时具体化将应用于列表中的第二个点。(在标准术语中,[expr.ref]/2 表示它的第一个操作数是 glvalue,而 [basic.lval]/7 在这样的上下文中出现 prvalue 时应用临时具体化转换。std::string{}.operator=("hi")
.
评论
std::string{} = “hello”s;
编译