相关疑难解决方法(0)

将C++对象传递给自己的构造函数是合法的吗?

我很惊讶地意外地发现以下工作:

#include <iostream>            
int main(int argc, char** argv)
{
  struct Foo {
    Foo(Foo& bar) {
      std::cout << &bar << std::endl;
    }
  };
  Foo foo(foo); // I can't believe this works...
  std::cout << &foo << std::endl; // but it does...
}
Run Code Online (Sandbox Code Playgroud)

我将构造对象的地址传递给它自己的构造函数.这看起来像源级别的循环定义.标准是否真的允许您在构造对象之前将对象传递给函数,还是这种未定义的行为?

鉴于所有类成员函数已经将指向其类实例的数据的指针作为隐式参数,我认为这并不奇怪.并且数据成员的布局在编译时是固定的.

请注意,我不是在问这是有用还是好主意; 我只是在修补一些关于课程的更多信息.

c++ constructor class undefined-behavior language-lawyer

109
推荐指数
2
解决办法
6633
查看次数

c ++类可以将自己包含为成员吗?

我试图通过在C++中编写python例程来加速它,然后使用ctypes或cython来使用它.

我是c ++的新手.我正在使用Microsoft Visual C++ Express,因为它是免费的.

我计划实现一个表达式树,以及一个以后缀顺序评估它的方法.

我遇到的问题是:

class Node {
    char *cargo;
    Node left;
    Node right;
};
Run Code Online (Sandbox Code Playgroud)

我无法宣布leftright作为Node类型.

c++

41
推荐指数
3
解决办法
3万
查看次数

为什么我可以为引用分配新值,如何引用引用呢?

我有几个与C++中引用的使用有关的问题.

  1. 在下面显示的代码中,它是如何工作的,而不是在线上给出错误q = "world";

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      char *p = "Hello";
      char* &q = p;
      cout <<p <<' '<<q <<"\n";
      q = "World"; //Why is there no error on this line
      cout <<p <<' '<<q <<"\n";
    }
    
    Run Code Online (Sandbox Code Playgroud)
    1. 如何将参考q重新初始化为其他内容?

    2. 不是字符串文字,p = "Hello"常量或只读空间?所以如果我们这样做,

      q = "World";
      
      Run Code Online (Sandbox Code Playgroud)

      不会p改变应该是常量的字符串吗?

  2. 我已经阅读了有关C++引用类型变量的内容,因为它们无法重新初始化或重新分配,因为它们作为常量指针"内部"存储.所以编译器会给出错误.

    但实际上如何重新分配参考变量呢?

    int i;
    
    int &j = i;
    
    int k;
    
    j = k; //This should be fine, but how we reassign to something else …
    Run Code Online (Sandbox Code Playgroud)

c++ reference

32
推荐指数
3
解决办法
5万
查看次数

同一类的班级成员?

是否可以在C++中创建同一个类的子成员?就像是

class A
{
public:
  int i;
  A child;
};
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c++

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