小编scd*_*dmb的帖子

为什么__instancecheck__并不总是根据参数调用?

有这个代码:

class Meta(type):
  def __instancecheck__(self, instance):
    print("__instancecheck__")
    return True

class A(metaclass=Meta):
  pass


a = A()
isinstance(a, A) # __instancecheck__ not called
isinstance([], A) # __instancecheck__ called
Run Code Online (Sandbox Code Playgroud)

为什么__instancecheck__要求[]争论而不是a争论呢?

python python-3.x

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

添加两个unsigned char变量,结果为int

有代码:

#include <iostream>
int main(){
  unsigned char a = 4, b = 255;
  int g = (unsigned char)a + (unsigned char)b;
  std::cout << g << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

259
Run Code Online (Sandbox Code Playgroud)

为什么结果是259而不是3?如果添加了两个unsigned char变量,则应该有溢出,结果应为3,然后它应该从unsigned char 3转换为int 3.

c++

10
推荐指数
2
解决办法
7470
查看次数

由非常量变量定义的大小数组

有这样的代码:

#include <iostream>

int main()
{
  int size;
  std::cin >> size;

  size = size + 1;
  int tab3[size];

  tab3[0] = 5;
  std::cout << tab3[0] << " " << sizeof(tab3) << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

$ g++ prog.cpp -o prog -Wall -W 
$ ./prog
5
5 24
Run Code Online (Sandbox Code Playgroud)

为什么这段代码甚至可以编译?数组的长度不应该是常量变量吗?

我使用的是g ++ 4.4.5版.

c++ arrays

10
推荐指数
2
解决办法
732
查看次数

异常处理程序

有这个代码:

char text[] = "zim";
int x = 777;
Run Code Online (Sandbox Code Playgroud)

如果我查看放置x和文本的堆栈,那么输出是:

09 03 00 00 7a 69 6d 00
Run Code Online (Sandbox Code Playgroud)

哪里:

  • 09 03 00 00 = 0x309 = 777 < - int x = 777
  • 7a 69 6d 00 = char text [] ="zim"(ASCII码)

现在有try..catch的代码:

char text[] = "zim";
try{
  int x = 777;
}
catch(int){
}
Run Code Online (Sandbox Code Playgroud)

堆:

09 03 00 00 **97 85 04 08** 7a 69 6d 00
Run Code Online (Sandbox Code Playgroud)

现在textx之间放置了新的4字节值.如果我添加另一个捕获,那么会有类似的东西:

09 03 00 00 **97 85 04 …
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling g++

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

用ostream打印到无处

我想将数据发送到任何地方,我的意思是我不想在控制台或文件中打印数据,但我需要一些std::ostream对象.怎么做?

c++ printing stream

9
推荐指数
2
解决办法
5892
查看次数

当基类不是多态而是派生时,'this'地址不匹配

有这个代码:

#include <iostream>

class Base
{
public:
    Base() {
        std::cout << "Base: " << this << std::endl;
    }
    int x;
    int y;
    int z;
};

class Derived : Base
{
public:
    Derived() {
        std::cout << "Derived: " << this << std::endl;
    }

    void fun(){}
};

int main() {
   Derived d;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Base: 0xbfdb81d4
Derived: 0xbfdb81d4
Run Code Online (Sandbox Code Playgroud)

但是,当Derived类中的函数'fun'更改为virtual时:

virtual void fun(){} // changed in Derived
Run Code Online (Sandbox Code Playgroud)

然后,'this'的地址在两个构造函数中都不相同:

Base: 0xbf93d6a4
Derived: 0xbf93d6a0
Run Code Online (Sandbox Code Playgroud)

另一件事是如果类Base是多态的,例如我添加了一些其他虚函数:

virtual void funOther(){} // added to Base
Run Code Online (Sandbox Code Playgroud)

那么'this'匹配的地址再次: …

c++ polymorphism inheritance memory-layout

9
推荐指数
2
解决办法
1803
查看次数

改变Qt中的语言环境

我尝试使用QLocale和setDefault函数更改语言环境,但似乎它不起作用.以下是使用C本地化库和QLocale更改语言环境的示例.对于C本地化库,似乎它可以工作,但对于QLocale,似乎忽略了setDefault函数调用.

QLocale curLocale(QLocale("pl_PL"));
QLocale::setDefault(curLocale);
QDate date = QDate::currentDate();
QString dateString = date.toString();
// prints "Fri Nov 9 2012" but that was not expected
std::cout << dateString.toStdString() << std::endl;
// prints "en_US", but shouldn't it be "pl_PL"?
std::cout << QLocale::system().name().toStdString() << std::endl;

std::setlocale(LC_ALL, "pl_PL");
// prints "pl_PL"
std::cout << std::setlocale(LC_ALL, 0) << std::endl;
std::time_t currentTime;
std::time(&currentTime);
std::tm* timeinfo = std::localtime(&currentTime);
char charArray[40];
std::strftime(charArray, 40, "%a %b %d %Y", timeinfo);
// prints "pi lis 09 2012" and that's cool
std::cout << charArray …
Run Code Online (Sandbox Code Playgroud)

c++ qt translation

9
推荐指数
1
解决办法
2万
查看次数

lambda函数的类型

有这个代码:

auto fun = [](int x)->int {return x + 1; };
std::cout << typeid(fun).name() << std::endl;
Run Code Online (Sandbox Code Playgroud)

结果是:Z4mainEUliE_但c ++ filt似乎没有解释它是什么.什么是lambda表达式?

c++ lambda typeid c++11

9
推荐指数
3
解决办法
753
查看次数

线程安全容器

伪代码中有一些示例性的容器类:

class Container
{
public:
  Container(){}
  ~Container(){}
  void add(data new)
  {
    // addition of data
  }
  data get(size_t which)
  {
    // returning some data
  }
  void remove(size_t which)
  {
    // delete specified object
  }

private:
  data d;
};
Run Code Online (Sandbox Code Playgroud)

如何使这个容器成为线程安全的?我听说过互斥体 - 应该放置这些互斥体?互斥是静态的,还是全局的?在C++中,这个任务有什么好的库?

c++ multithreading

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

使用虚函数对类进行大括号初始化

有这个代码:

struct A {
   int x;
   void f() {}
};

struct B {
   int y;
   virtual void f() {}
};

A a = {2};

//B b = {3}; error: no matching constructor for initialization of 'B'

int main() {
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么变量的初始化a有效,但变量没有b

c++ c++11

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