繁体   English   中英

typeid 导致不同的编译器

[英]typeid result in different compilers

我正在观看以下视频

这里提到g++对于如下代码会报错:

#include<vector>
#include<typeinfo>
#include<iostream>
struct S
{
    std::vector<std::string> b ;
};
int main()
{
    S s;
    std::cout << typeid(S::b).name();
}
error: invalid use of non-static data member ‘S::b’

但是我在msvc和clang下没有遇到过这种错误。 谁是对的,为什么? 以及为什么改为

typeid(&S::b).name();

之后的结果是否正确?

Gcc 是错误的(错误 68604 )。 S::b是一个 id 表达式,指的是一个非静态数据成员,它只能在未评估的上下文中使用。 Gcc 似乎未能将其视为未评估的表达式。

作为解决方法,您可以:

std::cout << typeid(decltype(S::b)).name();

请注意,在typeid(&S::b).name(); , &S::b给出一个成员的指针; 结果与使用S::b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM