【问题标题】:How do I know the actual type and size of the return type of a non-static method in C++? [duplicate]如何知道 C++ 中非静态方法的返回类型的实际类型和大小? [复制]
【发布时间】:2021-07-07 06:13:28
【问题描述】:

在 C++ 中,我们可以在函数的非静态数据成员上使用 sizeofdecltype,但它们中的任何一个都不适用于非静态方法的返回类型,例如decltype(std::vector<int>::size())sizeof(std::vector<int>::size()),有什么理由限制这个吗?还是有一些我没有发现的方法?

【问题讨论】:

    标签: c++ methods sizeof decltype non-static


    【解决方案1】:

    decltype 说明符需要有一个合法的表达式——你可以在实际代码中使用它。因此,您可以创建一个实例并像这样调用该实例上的成员:

    decltype(std::vector<int>().size())
    

    sizeof 运算符也是如此。它需要接受合法的表达。

    【讨论】:

    • 但是为什么允许非静态数据成员,std::pair&lt;int, int&gt;::first不是合法的表达?
    • @AlanJian 之所以有效,是因为它是一个 entity (或产生实体的表达式)。根据链接的参考,这是一种不同的情况,它是一个class member access 表达式,在这种情况下它会产生它的类型。 引用: “如果参数是无括号的 id 表达式或无括号的类成员访问表达式,则 decltype 产生由该表达式命名的实体的类型。” 请参阅: en.cppreference.com/w/cpp/language/decltype
    • 因此,如果表达式产生 entity,您可以使用 decltype 产生该实体的类型。但是,如果表达式产生一个值 - 它必须是一个有效的表达式,才能真正在代码中产生该值。然后decltype 可以返回该值的类型。
    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2018-11-19
    • 2021-07-26
    • 2012-11-12
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多