小编Sir*_*sto的帖子

qApp与QApplication.instance()

使用PyQt5,这两个都返回应用程序对象:

app = QtWidgets.QApplication.instance()
app = QtWidgets.qApp
for i in app.arguments()[1:]:
    ...
Run Code Online (Sandbox Code Playgroud)

但为什么print(QtWidgets.QApplication.instance() is QtWidgets.qApp)打印False

python pyqt instance pyqt5 qapplication

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

使用带有constexpr函数的noexcept

在Scott Meyers的"Effective Modern C++"中,他提供了以下函数来查找数组的大小:

template<typename T, std::size_t N>
constexpr std::size_t arraySize(T (&)[N]) noexcept
{
    return N;
}
Run Code Online (Sandbox Code Playgroud)

这里'noexcept'的目的是什么?据我了解,noexcept仅影响运行时代码的生成 - 但是我看不到在运行时调用此函数而不是编译时间的任何情况?

c++

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

Python 属性和描述符

我一直在Descriptor HowTo Guide 中阅读有关描述符的内容,但我对这句话感到困惑:

如果实例的字典有一个与数据描述符同名的条目,则数据描述符优先。

字典如何包含两个具有相同名称的项目(一个普通条目和一个数据描述符)?或者作为描述符的属性没有存储在__dict__?

python descriptor python-3.x python-descriptors

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

char数组的模板类型推导

template<typename T>
class X;

int main() {
    X<decltype("")> x;
}
Run Code Online (Sandbox Code Playgroud)

为什么G ++演绎Tconst char (&)[1],而不是简单const char[1]

c++ templates decltype string-literals

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

数组纯右值的地址

我不明白为什么这不起作用:

auto a = (int[]){1, 2, 3, 4, 5};

> error: taking address of temporary array
Run Code Online (Sandbox Code Playgroud)

我知道数组左值在转换为右值时会衰减为指针,但这里数组已经是右值(实际上是纯右值),因此不需要衰减。我本来期望a被推导并初始化为int[5]. 为什么它试图获取临时地址?

c++ arrays temporary-objects

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

lambda的别名

ISO C++ FAQ(https://isocpp.org/wiki/faq/cpp11-language-templates,"模板别名")引用以下示例:

using P = [](double)->void; // using plus suffix return type
Run Code Online (Sandbox Code Playgroud)

我试图用g ++ -std = c ++ 11编译它时出错:

error: expected type-specifier before ‘[’ token
Run Code Online (Sandbox Code Playgroud)

正确的语法应该是什么?如果我做

auto p = [](double)->void {};
Run Code Online (Sandbox Code Playgroud)

p被推断为是<lambda(double)>或者main()::<lambda(double)>,取决于范围.但是,我不能这样做

using P = <lambda(double)>;
Run Code Online (Sandbox Code Playgroud)

因为这也给出了一个错误:

expected type-specifier before ‘<’ token
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

参数声明中的"const T const"

我前几天遇到过这段代码:

template< class T > 
T findMax(const T const * data, 
        const size_t const numItems) { 
// Obtain the minimum value for type T 
T largest = 
    std::numeric_limits< T >::min(); 
for(unsigned int i=0; i<numItems; ++i) 
if (data[i] > largest) 
largest = data[i]; 
return largest; 
}
Run Code Online (Sandbox Code Playgroud)

为什么每个参数都包含两个consts?

c++

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

编译器优化是否可以给出左值而不是右值?

以下代码:

int x = 0;
x+0 = 10;
Run Code Online (Sandbox Code Playgroud)

不出所料产生编译错误

lvalue required as left operand of assignment
Run Code Online (Sandbox Code Playgroud)

但是,是否保证所有符合标准的编译器都会产生类似的错误,或者编译器可以合理地将第2行视为

x = 10;
Run Code Online (Sandbox Code Playgroud)

哪个会编译?

c++

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

<=>(宇宙飞船)操作员的发音

该运营商是否有可接受的发音?如何应该

if((x <=> y) < 0)
Run Code Online (Sandbox Code Playgroud)

读出来?"如果x与y相比小于0"呢?

c++

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