有这个代码:
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争论呢?
有代码:
#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.
有这样的代码:
#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版.
有这个代码:
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)
哪里:
现在有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)
现在text和x之间放置了新的4字节值.如果我添加另一个捕获,那么会有类似的东西:
09 03 00 00 **97 85 04 …Run Code Online (Sandbox Code Playgroud) 我想将数据发送到任何地方,我的意思是我不想在控制台或文件中打印数据,但我需要一些std::ostream对象.怎么做?
有这个代码:
#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'匹配的地址再次: …
我尝试使用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(¤tTime);
std::tm* timeinfo = std::localtime(¤tTime);
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) 有这个代码:
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表达式?
伪代码中有一些示例性的容器类:
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++中,这个任务有什么好的库?
有这个代码:
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++ ×9
c++11 ×2
arrays ×1
g++ ×1
inheritance ×1
lambda ×1
polymorphism ×1
printing ×1
python ×1
python-3.x ×1
qt ×1
stream ×1
translation ×1
typeid ×1