我想知道以下形式的初始化:
int array[] = {
v - 1,
array[0] + 1
} ;
Run Code Online (Sandbox Code Playgroud)
在第二个元素的初始化中,使用第一个元素的值,但尚未初始化整个数组.这恰好用g ++编译,但我不确定这是否实际上是可移植的和定义良好的构造?
为了填充std::vector<struct_name>from std::cin,我通常写如下代码:
struct point{
int x, y;
};
int main()
{
std::size_t n;
std::cin>>n;
std::vector<point> vec(n);
for (auto& p:vec)
std::cin>>p.x>>p.y;
//...
}
Run Code Online (Sandbox Code Playgroud)
但是今天我发现了另一种使用默认构造函数的方法:
struct point{
int x, y;
point(){
std::cin>>x>>y;
}
};
int main()
{
std::size_t n;
std::cin>>n;
std::vector<point> vec(n);
//...
}
Run Code Online (Sandbox Code Playgroud)
问题:
我对根据 C++11(和更新的)标准的行为感兴趣
注意:这个问题与总订单无关.可以使用获得相同类型的指针的总顺序std::less.
据此,如果将两个指针指向operator<不同的分配,则不允许比较两个指针.
它在哪种意义上是不允许的?是实现定义,未指定还是未定义的行为?
我想我在某个地方看到它没有说明.不需要实现来记录行为是什么,但必须有一些行为.所以这意味着,比较任何两个指针仍然是合法的,但不一定会产生总订单.这是否意味着,当两次比较相同的两个指针时,我们仍然必须得到一致的结果?一般情况是:在应用程序中两次调用相同的未指定行为总是会产生相同的结果吗?
int i1, i2;
int* a = &i1;
int* b = &i2;
bool b1 = a < b; // unspecified, right?
bool b2 = a < b;
assert(b1 == b2); // Is this guaranteed to be true?
Run Code Online (Sandbox Code Playgroud)