相关疑难解决方法(0)

(C/C++)数组初始化可以引用自身吗?

我想知道以下形式的初始化:

int  array[] = {
v - 1,
array[0] + 1
} ;
Run Code Online (Sandbox Code Playgroud)

在第二个元素的初始化中,使用第一个元素的值,但尚未初始化整个数组.这恰好用g ++编译,但我不确定这是否实际上是可移植的和定义良好的构造?

c++

30
推荐指数
2
解决办法
918
查看次数

标准是否保证了向量元素的初始化顺序?

为了填充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)

问题

  1. 向量元素的初始化顺序是否由标准(0,1,2,n-1...)保证?
  2. (如果上一个问题的答案是正确的)第二个变体真的有两次有效吗?

我对根据 C++11(和更新的)标准的行为感兴趣

c++ language-lawyer

11
推荐指数
2
解决办法
754
查看次数

运算符<(小于)指针是否一致?

注意:这个问题与总订单无关.可以使用获得相同类型的指针的总顺序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)

c++ pointers

5
推荐指数
1
解决办法
522
查看次数

标签 统计

c++ ×3

language-lawyer ×1

pointers ×1