【发布时间】:2019-11-27 21:50:52
【问题描述】:
为一个数组分配行内存然后对该数组中的对象调用赋值运算符是否符合标准?
例如:
template <typename T>
void func(size_t sz, size_t pos)
{
static constexpr std::align_val_t __al = std::align_val_t(alignof(T));
T* data= static_cast<T*>(::operator new(sz * sizeof(T), __al));
data[pos] = T(1, 2); //is this legal? thechnically object at data[pos] is in some undetermenistic state.
}
【问题讨论】:
-
不要使用以下划线开头的标识符。这些是为 C++ 实现保留的。
-
@aschepler — 这只是保留名称包含两个连续下划线的规则的特例。
-
@RemyLebeau 它的标识符以 一个 下划线开头,然后是一个大写字母,或者包含两个连续的下划线。
-
@aschepler 你是对的,我误读了en.cppreference.com/w/cpp/language/identifiers 所说的内容。
标签: c++ object assignment-operator