【发布时间】:2020-10-24 03:30:14
【问题描述】:
这个answer 提出了以下问题。
假设我们有一个简单的
struct S {
int& i;
}
在内部(至少在 GCC 和 Clang 中)S 仅包含指向 int 的指针,并且
static_assert(sizeof(int*) == 8);
static_assert(sizeof(S) == 8);
S 有唯一的对象表示吗? GCC 和 Clang 不同意 *:
static_assert( std::has_unique_object_representations_v<int*>);
static_assert(!std::has_unique_object_representations_v<S>); // GCC
static_assert( std::has_unique_object_representations_v<S>); // Clang
哪个编译器在这里,为什么?
* idclev 463035818 注意到 GCC 和 Clang 之间的分歧。
【问题讨论】:
-
MSVC 同意 GCC。
-
@eerorika 这本身就是一件不同寻常的事情! :-)
-
@AdrianMole 好吧,在这种情况下,他们必须至少同意一个其他编译器:)
-
@eerorika:他们本可以忠于传统,根本不执行
has_unique_object_representations_v;)。 -
引用只是指针的替代语法。引用成员没有意义,它的规范和实现都是错误的。从你的代码库中禁止引用成员比浪费时间推理要容易得多。
标签: c++ c++17 language-lawyer