标量在c++类型特征意义上的作用是什么?
What is the purpose of a scalar in the C++ type traits sense?
我已经能够在cppreference.com, cplusplus.com和这个网站(什么是c++中的标量对象?)上找到参考资料,使我能够确定特定的c++数据类型是否为标量。也就是说,我可以应用这样一个心理算法:"它是引用类型、函数类型还是void?"如果不是,它是数组、类还是联合?如果不是,它就是标量类型。"在代码中,当然,我可以应用std::is_scalar<T>
。最后,我可以应用工作定义"标量类型是具有内置加法操作符功能的类型,没有重载(算术、指针、成员指针、enum和std::nullptr_t)"。
我没能找到的是标量分类的目的的描述。为什么会有人关心一个东西是不是标量呢?这似乎是一种"剩余"分类,就像动物学分类学中的"爬行动物"("爬行动物是,嗯,不是鸟或哺乳动物的羊膜动物")。我猜它一定有什么用处来证明它的混乱。我可以理解为什么有人想知道类型是否是引用——例如,您不能接受引用的引用。但是为什么人们要关心一个东西是不是标量呢?标量性是关于什么的?
给定is_scalar<T>
,您可以确定operator=()
, operator==()
和operator!=()
对任何 T
做您认为的(即分别赋值,比较和逆)。
- 一个
class T
可能有也可能没有这些,具有任意的含义; - a
union T
有问题; 一个函数没有 - 一个引用可能包含上述任何一个;
- 一个数组-好吧,对于两个不同大小的数组,
==
和!=
将使其衰减为指针并进行比较,而=
将在编译时失败。
=
;因此,如果您有is_scalar<T>
,您可以确保这些工作一致。否则,您需要进一步查看
目的之一是编写更有效的模板特化。在许多体系结构中,传递指向对象的指针比复制它们更有效,但是标量可以放入寄存器中,并且可以用单个机器指令复制。或者泛型类型可能需要锁定,而机器保证它将使用单个原子指令读取或更新正确对齐的标量。
在cppreference.com的注释中有线索吗?
c++内存模型中的每个单独的内存位置,包括语言特性(例如虚表指针)使用的隐藏内存位置,都具有标量类型(或者是相邻的非零长度的位域序列)。表达式求值中的副作用排序、线程间同步和依赖排序都是根据单个标量对象定义的。
- "using namespace std;"在C++的作用是什么?
- 此代码中的" "是什么,它的基本作用是什么?
- 在模板参数中使用 {} 在 type_trait{} 中时,其作用是什么<T>?
- <<、>>算子在循环中的作用是什么
- 在c++中,减号和加号对字符串的作用是什么
- 窄集(_cast)的作用是什么
- 在这种情况下,#define 的作用是什么?
- 遍历模板参数包,没有争论的专业化的作用是什么?
- 在 c++ 中,没有 **std::fixed** 的 **std::setprecision()** 的作用是什么?
- 访问多个阵列时 CPU 缓存的作用是什么?
- 以下表达式的作用是什么:x = (a1,a2,..,n);
- 私人成员的作用是什么?
- 这段代码的作用是什么?
- *.exp文件的作用是什么
- ifstream::open()真正的作用是什么
- 如何在矩阵中使用指针.这行代码的作用是什么:int r=**(++b);
- 这个函数的作用是什么?与夹紧值有关
- 这个运算符()语法的作用是什么
- std::函数的模板参数中“const”修饰符和引用的作用是什么
- 字符串流在C++编程中的作用是什么