C++中的引用类型是POD类型吗?

Min*_*uấn 8 c++ pod

C++中的引用类型也是POD类型吗?是int&POD类型吗?那怎么样?

struct Q { int& i; }
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?

Dav*_*men 9

没有.

设置引用某些内容的成员的唯一方法是通过用户声明的构造函数,因此,您的结构是非POD.

更新:
答案仍然是否定的.

C++ 03标准规定" A POD-struct是一个聚合类,它没有非POD-struct类型的非静态数据成员,非POD-union(或此类类型的数组)或引用,以及. ...... "(C++ 03标准第9节第5段).

在C++ 11中,POD-struct" 是一个既简单类又是标准布局类的类,而且...... "和标准布局类" 没有非类型的非静态数据成员标准布局类(或此类类型的数组)或引用 "(C++ 11标准第9节,第6-9段).

我解析那些以"或引用"结尾的短语,意味着POD类不能包含任何引用类型的非静态数据成员.在"或引用"之前缺少逗号确实让位于其他解释(例如,它是对非POD类的引用,使得引用不好,而不是参考本身),但我坚持我的解释.


ste*_*fan 6

有一种标准方法(使用C++ 11)在编译时确定.

#include <iostream>
#include <type_traits>

struct Q
{
    int& i;
};

int main()
{
    std::cout << std::is_pod<int>::value << "\t";
    std::cout << std::is_pod<int&>::value << "\t";
    std::cout << std::is_pod<Q>::value << "\n";
}
Run Code Online (Sandbox Code Playgroud)

演示:http://ideone.com/PECzfT

输出将是1 0 0,所以没有一个参考到int是不POD.