小编son*_*yao的帖子

引用基类模板成员变量的简单方法

有没有办法在没有基类名称和范围解析运算符的情况下引用基类模板的成员变量?

template<typename D>
struct B0 {
    int value;
};
struct D0: B0<D0> {
    D0() {
        B0<D0>::value = 1; // OK.
        value = 1;         // OK without `B0<D0>::`.
    }
};

template<typename T>
struct B1 {
    T value;
};
template<typename T>
struct D1: B1<T> {
    D1() {
        B1<T>::value = 1; // OK.
        // value = 1; // Compile error without `B1<T>::`.
                      // Compile error: use of undeclared identifier 'value'
                      // `B1<T>::` is tedious everywhere `value` is referenced.
    }
};

template<typename T, typename …
Run Code Online (Sandbox Code Playgroud)

c++ templates base-class class-template name-lookup

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

new int[100] 和 new int[100]() 的区别;

如题

#include <iostream>
int main() {
    auto* a = new float[1000000];
    auto* b = new float[10]();
    for(auto i=0; i<1000000; i++){
        std::cout << "a" << a[i] << std::endl;
    }
    for(auto i=0; i<10; i++){
        std::cout << "b" << b[i] << std::endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有什么不同?我试过两个输出都是零。

另外关于智能指针,如何确保它可以零初始化。

std::unique_ptr<int[]> p = std::make_unique<int[]>(100);
Run Code Online (Sandbox Code Playgroud)

c++ initialization new-operator unique-ptr c++11

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

为什么在初始化 std::vector 时不能使用模板整数?

我正在尝试创建一个类 BigInt,其中包含一个带有 D 元素的 std::vector。

template<int D>
class BigInt
{
    public:
        std::vector<short> digit(D, 0);
};
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,指出“D”不是一种类型

c++ templates initialization class vector

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

如何在 constexpr if-else 链中导致静态错误?

在以下 C++20 函数模板中:

template<int i>
void f() {
    if constexpr (i == 1)
       g();
    else if constexpr (i == 2)
       h();
    else
       ??? // <--error
}
Run Code Online (Sandbox Code Playgroud)

有什么我们可以写的东西,???这样f<3>()在编译时调用就会失败?

c++ static-assert constexpr c++20 if-constexpr

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

评估顺序,例外

如果在赋值的rhs上抛出异常,则在下面的表达式中:bad_alloc将linesArg已经减少了吗?:

try{    
  buffer[--linesArg] = new char[rows];
}catch(std::bad_alloc& ba){

}
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer

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

如何使用构造函数中的参数来调用C++中另一个类的构造函数?

我有个问题.我想从"Game"类中调用"gameWindow"的构造函数.问题是,如果我从构造函数中调用它,它将初始化为局部变量(示例A),如果我将其定义为私有成员 - 我不能使用构造函数的参数.如何将gamewindowObj作为构造函数的成员?

//示例А

class Game{
public:
    Game(int inWidth, int inHeight, char const * Intitle);
};

Game::Game(int inWidth, int inHeight, char const * Intitle){
    gameWindow gamewindowObj=gameWindow(inWidth, inHeight, Intitle);
}
Run Code Online (Sandbox Code Playgroud)

//示例В

class Game{
public:
    Game(int inWidth, int inHeight, char const * Intitle);
private:
    gameWindow gamewindowObj=gameWindow(inWidth, inHeight, Intitle);
};
Game::Game(int inWidth, int inHeight, char const * Intitle){}
Run Code Online (Sandbox Code Playgroud)

c++ oop constructor initialization

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

C++ 用于使用逗号运算符的多个控制语句

如果在“for 循环”中使用逗号运算符来编写多个控制语句,它如何?我试过

#include <iostream>

using namespace std;

int main() {
        for (int x = 0, y = 0; x < 3, y < 4; ++x, ++y) {
                cout << x << " " << y << endl;
        }
        return 0;
}

Run Code Online (Sandbox Code Playgroud)

似乎只计算最后一个表达式。泰

c++ for-loop comma-operator

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

在 C++ 中,将左值完美转发到函数模板的正确方法是什么?

接受完美转发的参数包的正确方法是什么,以便它可以采用任何类型并简单地转发它们?以下代码适用于常规类型,但不适用于指针类型:

template<typename ...A>
void b(A &&... args)
{}

template<typename ...A>
void a(A &&... args)
{
    b(std::forward<A>(args)...);
}


int main() {

    // ok
    a<int>(5);

    // error: cannot bind rvalue reference of type ‘int*&&’ to lvalue of type ‘int*’
    int *foo = nullptr;
    a<int*>(foo);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

[编辑] 感谢您的快速而精彩的回复!我过于简化了 - 这是我试图解决的问题的一个更接近的例子:

#include <iostream>
using namespace std;

template<typename F>
struct fun;

template<typename F, typename ...A>
struct fun<F(A...)>
{
    void b(A &&... args)
    {}
    
    void a(A &&... args)
    {
        b(std::forward<A>(args)...);
    }
};

int main() …
Run Code Online (Sandbox Code Playgroud)

c++ templates perfect-forwarding c++11

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

当按值发送参数时,为什么默认复制构造函数不调用?

该程序初始化一个类的对象并将其作为参数传递给另一个成员函数。当我发表声明时

Address a2=a1;
Run Code Online (Sandbox Code Playgroud)

它显示没有错误。但是当我将参数作为对象时

Employee(int id, string name, Address address);
Run Code Online (Sandbox Code Playgroud)

并调用它使用

Employee e1 = Employee(101,"Nakul",a2);
Run Code Online (Sandbox Code Playgroud)

它显示以下错误。

#include <iostream>  
using namespace std;  
class Address {  
    public:  
     string addressLine, city, state;    
     Address(string addressLine, string city, string state)    
     {    
        this->addressLine = addressLine;    
        this->city = city;    
        this->state = state;    
     }
    
};  
class Employee    
{    
     private:  
     Address address;  //Employee HAS-A Address   
     public:  
     int id;    
     string name;    
     Employee(int id, string name, Address address)    //Here it is showing an error
     {    
           this->id = id;    
           this->name = name; …
Run Code Online (Sandbox Code Playgroud)

c++ oop constructor

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

接收迭代器并返回向量的函数

我的任务是创建一个与以下相同的函数

template <typename It>
auto MakeSet(It range_begin, It range_end) {
     return set(range_begin, range_end);
}
Run Code Online (Sandbox Code Playgroud)

但它必须是一个模板,它接收迭代器(begin() 和 end())并返回一个包含范围内元素的向量。

我试过

template<typename Type, typename It>
auto MakeVector(It range_begin, It range_end) {
    return vector<Type> v(range_begin, range_end);
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误

无法识别的模板声明/定义

c++ iterator stdvector

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