C++中的引用类型也是POD类型吗?是int&POD类型吗?那怎么样?
struct Q { int& i; }
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?
没有.
设置引用某些内容的成员的唯一方法是通过用户声明的构造函数,因此,您的结构是非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类的引用,使得引用不好,而不是参考本身),但我坚持我的解释.
有一种标准方法(使用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)
输出将是1 0 0,所以没有一个参考到int是不POD.