函数未在类型id中调用
Is function not called inside typeid?
函数不是在类型id中调用的吗?请考虑下面的代码。
#include <iostream>
#include <typeinfo>
using namespace std;
int mul10(int &s)
{
static int count = 1;
cout << "Evaluating call " << count << endl;
count++;
s *= 10;
return(s);
}
int main()
{
int i = 5;
cout << typeid(mul10(i)).name() << endl;
cout << i << endl;
return(0);
}
所以这里的输出是
int
5
很明显,i
的值没有改变,函数mul10
也没有被实际调用。这就是类型化参数的计算方式吗?
仅当 typeid
的操作数是多态类类型的 glvalue 时,才会计算它。由于mul10
的返回类型,即int
,不是多态类类型,因此不计算操作数,这意味着不调用mul10
。
如果我们
去看标准的草案C++它告诉我们,除非多态类类型的表达式glvalue,否则结果基于对象的静态类型。从第 5.2.8
节 [expr.typeid] 强调我的:
当 typeid 应用于多态类类型的 glvalue 以外的表达式时,结果将引用 到 std::type_info 对象,表示表达式的静态类型。Lvalue-to-rvalue (4.1(,数组到指针 (4.2( 和函数到指针 (4.3( 转换不会应用于表达式。如果类型 表达式是一种类类型,该类应完全定义。表达式是未计算的操作数 (第5条(。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- Boost Beast 异步服务器失败,断言失败:(id_ != T::id) 在多个 aync 调用中
- 通过 id 访问 QML 插槽中的嵌套对象(从 c++ 调用)
- 如何使用方法ID从Powerbuilder调用PBNI方法
- 从 WindowsAPI 调用 NetLocalGroupAddMembers 时,安全 ID 结构无效错误
- 获取每个类的 int Id,使用类名及其对象调用
- C++:父对象在不调用方法的情况下更改其id属性
- 通过指针对基函数进行限定 id 调用
- 从MFC中的DoDataExchange确定调用方ID
- 函数未在类型id中调用
- Boost::this_thread::get_id在exit()调用期间不返回id
- 通过IDispatch公开COM函数的服务器如何区分调用函数而不传递任何ID参数的不同客户端?
- 通过FindItem SOAP调用获取RecurringMaster ID