【问题标题】:Constructor call is a prvalue expression构造函数调用是纯右值表达式
【发布时间】:2017-05-23 17:58:23
【问题描述】:

在 C++standard 中可以找到纯右值表达式的示例:

"prvalue

以下表达式是纯右值表达式:

文字(字符串文字除外),如42、true或nullptr;

非引用返回类型的函数调用或重载的运算符表达式,例如 str.substr(1, 2)、str1 + str2 或 it++; ……”

这是T()(构造函数调用)等表达式的去向吗?

这样的表达还有别的名字吗?

【问题讨论】:

    标签: c++ constructor prvalue


    【解决方案1】:

    虽然默认构造函数的特殊情况让我有点困惑,但这被认为是一个强制转换表达式,它在列表中略低:

    • 转换为非引用类型的表达式,例如static_cast<double>(x)std::string{}(int)42

    尽管转换 nothing 的想法很奇特,T() 语法确实包含在表单 #4 here 中。

    【讨论】:

    • 是不是因为初始化器(构造函数的参数叫做'initializer',对吗?)被转换为T类型而被认为是强制转换?
    • 我找到了另一个page,其中提到了这个特定的表达式:“3)通过函数转换或带括号的表达式列表临时初始化prvalue”。将构造函数调用称为强制转换似乎很奇怪(对我来说),但如果标准是这样称呼它的,那就这样吧。
    • @user42768 这就是它的要点,是的。
    • 好的。所以direct initialization(在我之前评论中链接的页面中)仍然被认为是演员表。谢谢!
    • @user42768 仅当它正在创建一个临时的,如果内存服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    相关资源
    最近更新 更多