Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何断言某物是数组(包括VLA)?_C++_G++_Gnu - Fatal编程技术网

C++ 如何断言某物是数组(包括VLA)?

C++ 如何断言某物是数组(包括VLA)?,c++,g++,gnu,C++,G++,Gnu,使用GNU扩展 在C中,我有: #定义为同一类型(a、b)\ __内置类型兼容类型(a型、b型) #定义is_数组(a)(!is_相同类型((a),&(a)[0])) #定义静态数组(a)\ _静态_断言(是_数组(a),“不是`[]`!”) 这正确地静态地断言某物是一个数组 但是,在g++中,没有 在g++中,我有以下几点: \define Static\u assert\u数组(a)\ 静态_断言(std::是_数组::值,“不是一个`[]`!”) 但当我尝试将其用于VLA时,我发现它不

使用GNU扩展

在C中,我有:

#定义为同一类型(a、b)\
__内置类型兼容类型(a型、b型)
#定义is_数组(a)(!is_相同类型((a),&(a)[0]))
#定义静态数组(a)\
_静态_断言(是_数组(a),“不是`[]`!”)
这正确地静态地断言某物是一个数组

但是,在g++中,没有

在g++中,我有以下几点:

\define Static\u assert\u数组(a)\
静态_断言(std::是_数组::值,“不是一个`[]`!”)
但当我尝试将其用于VLA时,我发现它不支持VLA:

test.c:10:39: error: ‘int [n]’ is a variably modified type
   10 |  return std::is_array <__typeof__(vla)>::value;
      |                                   ^
test.c:10:39: error:   trying to instantiate ‘template<class> struct std::is_array’

test.c:10:39:error:'int[n]'是一个经过可变修改的类型
10 |返回std::is_array::value;
|                                   ^
test.c:10:39:错误:尝试实例化“模板结构std::is_数组”

有没有办法让宏与VLAs一起工作?

alx\u Is\u array
vs
Is\u array
这是打字错误吗?顺便说一句,这个问题很有趣。VLA经常出现在疑问句中,但很少有人有意识地使用它们。我认为没有编译器是不可能做到的。模板在编译时需要知道确切的类型,而数组在大多数情况下会衰减为指针,这使得它们很难被识别distinguish@idclev463035818是的,是打字错误。它是我的库的前缀,我忘了删除它:)。修正。C++@M.M中没有VLA,但g++中有。这是打字错误吗?顺便说一句,这个问题很有趣。VLA经常出现在疑问句中,但很少有人有意识地使用它们。我认为没有编译器是不可能做到的。模板在编译时需要知道确切的类型,而数组在大多数情况下会衰减为指针,这使得它们很难被识别distinguish@idclev463035818是的,是打字错误。它是我的库的前缀,我忘了删除它:)。修正了。C++@M.M中没有VLA,但g++中有。