小编sfz*_*sfz的帖子

什么类型的头文件不应该被保护以防止多个包含?

我读了dcmtk源代码,并在ofstdinc.h中找到了注释:

// this file is not and should not be protected against multiple inclusion
Run Code Online (Sandbox Code Playgroud)

什么样的头文件不应该被保护免受多重包含?

c c++ multiple-inclusions

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

为什么模板函数只基于返回类型才能在C++上运行?

据我所知,重载函数必须包含不同的参数(类型或计数).所以我认为模板函数不应该只基于返回类型.但是以下代码可以使用GCC 6.3.0.

#include <iostream>
using namespace std;

template<typename T>
T add(double a, double b)
{
    return static_cast<T>(a + b); 
}

int main()
{
    cout << add<int>(1.1, 1) << endl;
    cout << add<double>(1.1, 1) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

构建并运行:

g++ -g -o test test.cpp
./test
2
2.1
Run Code Online (Sandbox Code Playgroud)

剂量C++标准澄清了这一点?谢谢!

c++ templates

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

在 C++11 中返回右值引用或临时对象

Effective Modern C++ item 12 中,有一个关于C++11 函数的引用限定符的示例代码:

class Widget {
public:
    using DataType = std::vector<double>;
    …
    DataType& data() &            // for lvalue Widgets
    { return values; }            // return lvalue

    DataType data() &&            // for rvalue Widgets
    { return std::move(values); } // return rvalue
    …
private:
    DataType values;
};
Run Code Online (Sandbox Code Playgroud)

那么为什么第二个data() 右值引用重载函数返回一个临时对象 DataType而不是一个右值引用 DataType&&呢?

c++ rvalue-reference

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

C++ 枚举类默认值,无需初始化

没有初始化的变量的默认值是多少enum class?以下代码打印奇怪的结果。

#include <iostream>
#include <cstdio>

using namespace std;

struct C {
    C() {
        m_a = 1;
    }

    enum class E:bool {
        a = false,
        b = true,
    };

    int m_a;
    E m_e;
};

int main()
{
    C c;
    cin >> c.m_a;
    printf("m_e: %d; compare to C::E::a: %d\n", static_cast<int>(c.m_e), c.m_e == C::E::a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用gcc版本9.4.0构建(Ubuntu 9.4.0-1ubuntu1~20.04.1)

g++ -g -o c c.cpp
# run, input 1 and get the result.
./c
1
m_e: 252; compare to C::E::a: …
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++17

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

标签 统计

c++ ×4

c ×1

c++17 ×1

gcc ×1

multiple-inclusions ×1

rvalue-reference ×1

templates ×1