如何区分空结构和一个char?

问题描述 投票:2回答:1

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

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


int main()
{
    char buffer1[sizeof(EmptyStruct)]; // size 1 byte
    char buffer2[sizeof(CharStruct)]; // size 1 byte
}
c++ struct is-empty
1个回答
7
投票

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所评论的那样。

© www.soinside.com 2019 - 2024. All rights reserved.