c++ - 如何区分空结构和一个字符?

标签 c++ struct is-empty

我正在尝试实现自己的仿函数并面临空的捕获 lambda。如何区分空结构和一个字符?编译时是否有任何“真实”大小?我只想忽略空的 lambda 以防止无用的分配。

struct EmptyStruct {};
struct CharStruct { char c; };


int main()
{
    char buffer1[sizeof(EmptyStruct)]; // size 1 byte
    char buffer2[sizeof(CharStruct)]; // size 1 byte
}

最佳答案

cannotsizeof() 做,使用 std::is_empty ,像这样:

#include <iostream>
#include <type_traits>

struct EmptyStruct {};
struct CharStruct { char c; };
int main(void)
{
  std::cout << std::boolalpha;
  std::cout << "EmptyStruct " << std::is_empty<EmptyStruct>::value << '\n';
  std::cout << "CharStruct " << std::is_empty<CharStruct>::value << '\n';
  return 0;
}

输出:

EmptyStruct true
CharStruct false

正如@RichardCritten 评论的那样。

关于c++ - 如何区分空结构和一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55667069/

相关文章:

c++ - OpenCV 断言矩阵乘法失败

c - MPI 笛卡尔拓扑 : MPI_Neighbor_alltoall sends wrong data

string - 如何在 Robot Framework 中搜索空字符串/比较两个字符串

string - 在 Go 中测试空字符串的最佳方法是什么?

java - 验证字符串为空或 null 的最佳方法

c++ - 定义函数

c++ - 学习 CPP : Split string and manipulation?

c++ - 具有 cv 和 ref 类型的模板特化

c - 将结构数组发送到 cuda 内核

c# - 在 C++ IDL 中定义结构,然后在 C# 中适本地定义 MarshalAs()