小编amp*_*awd的帖子

功能默认参数将被忽略

对于这段简化的代码,我遇到了以下错误:

错误:函数std :: cout << f();的参数太少;

int g(int a = 2, int b = 1)
{
    return a + b;
}

template<class Func>
void generic(Func f)
{
    std::cout << f();
}

int main()
{
    generic(g);
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么函数的默认参数f没有传递给函数的原因generic.它的行为就像f没有任何默认参数......

那有什么不对?

如何正确转发默认参数?

c++ templates g++ c++11

18
推荐指数
2
解决办法
883
查看次数

乘法的顺序

C++在链式乘法中的作用是什么?

int a, b, c, d;
// set values
int m = a*b*c*d;
Run Code Online (Sandbox Code Playgroud)

c++ operator-precedence operator-keyword

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

为什么不能安全地转换指向数字类型的指针?

考虑这段代码

T* pa = new T(13);
int address = reinterpret_cast<int>(pa);
Run Code Online (Sandbox Code Playgroud)

其中T可以是任何内置类型.

1)我无法理解重新诠释这里有什么问题?

2)这种铸件会导致不确定的行为的情况是什么?

3)将pa始终包含内存地址的正确十进制表示?

c++ pointers casting c++11

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

用户定义类型上的空尖括号

对于<>c++ 模板中的空尖括号,我只知道 2 个用例,它们遇到了:

1)在模板完全专业化期间,例如

template<typename T>
class X
{};

template<>
class X<char>
{};
Run Code Online (Sandbox Code Playgroud)

2) 在模板化函数调用期间,可以推断出哪些参数类型,例如

template<typename T>
T add(T a, T b);

...  

add<>(1, 2);
Run Code Online (Sandbox Code Playgroud)

但是这个案例对我来说是全新的,我无法理解这种语法的含义(请看一下rapidxml::xml_node<>*):

class TestWidget : public GUI::Widget
{
public:
    TestWidget(const std::string& name, rapidxml::xml_node<>* elem);
    // ...
};
Run Code Online (Sandbox Code Playgroud)

xml_node<>构造函数参数中的类型赋予了什么语义???

c++ templates template-specialization c++11

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

使用 QString::split 函数时性能变慢

有一个文本文件可能最多包含5*10^62D 点。

在对读取此文件的代码进行了一些测试和播放后,我发现瓶颈在于我使用如下QString::split函数将读取行拆分为多个部分:

QString x, y; QStringList lineParts;   
while (!inputSream.atEnd())
{
    line = inputSream.readLine();
    if (line.size() > 0)
    {
        if (! line.contains("#"))
        {
        >>  lineParts = line.split(' ', QString::SkipEmptyParts);  //  performance go down by a almost ~2 seconds

            x = lineParts.at(0);
            y = lineParts.at(1);

            QPointF p;
            qreal yd = y.toDouble();
            p.setX(x.toDouble());
            p.setY(yd);

            if (yd < yRanges.first)
                yRanges.first = yd;      //  minY

            if (yd > yRanges.second)
                yRanges.second = yd;     //  maxY

            points.push_back(p);

        } else
        {
            headers.push_back(line);
        } …
Run Code Online (Sandbox Code Playgroud)

c++ string optimization performance qt5

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