C++ 中的引用类型也是 POD 类型吗?是int&
POD类型吗?还有呢
struct Q { int& i; }
任何人都可以帮助我吗?
不。
设置引用某些内容的成员的唯一方法是通过用户声明的构造函数,因此,您的结构是非 POD。
更新:
答案仍然是否定的。
C++03 标准规定“一个 POD-struct 是一个聚合类,它没有非 POD-struct、非 POD-union(或此类类型的数组)或引用类型的非静态数据成员,以及 . .. ”(C++03 标准第 9 节第 5 段)。
在 C++11 中,“POD-struct”是一个既是普通类又是标准布局类的类,并且... “和标准布局类”没有非静态类型的非静态数据成员。标准布局类(或此类类型的数组)或引用“(C++11 标准第 9 节第 6-9 段)。
我将那些以“或引用”结尾的短语解析为立即意味着 POD 类不能包含任何引用类型的非静态数据成员。“或引用”之前缺少逗号确实让位于其他解释(例如,它是对非 POD 类的引用,这使得引用变坏,而不是引用本身),但我坚持我的解释.
有一种标准方法(使用 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";
}
演示:http: //ideone.com/PECzfT
输出将为 1 0 0,因此没有对 int 的引用不是 POD。
POD 类型是任何内在类型或内在类型的聚合(基本上,任何没有自定义构造函数、析构函数、复制构造函数、复制赋值运算符或非静态指针到成员类型的东西(更多详细信息在这里)
由于必须通过自定义构造函数设置引用某些内容的成员,因此它将违反第一个要求。简而言之,将引用类型声明为成员的结构不是 POD 类型。