有没有办法在没有基类名称和范围解析运算符的情况下引用基类模板的成员变量?
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) 如题
#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) 我正在尝试创建一个类 BigInt,其中包含一个带有 D 元素的 std::vector。
template<int D>
class BigInt
{
public:
std::vector<short> digit(D, 0);
};
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,指出“D”不是一种类型
在以下 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>()在编译时调用就会失败?
如果在赋值的rhs上抛出异常,则在下面的表达式中:bad_alloc将linesArg已经减少了吗?:
try{
buffer[--linesArg] = new char[rows];
}catch(std::bad_alloc& ba){
}
Run Code Online (Sandbox Code Playgroud) 我有个问题.我想从"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) 如果在“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)
似乎只计算最后一个表达式。泰
接受完美转发的参数包的正确方法是什么,以便它可以采用任何类型并简单地转发它们?以下代码适用于常规类型,但不适用于指针类型:
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) 该程序初始化一个类的对象并将其作为参数传递给另一个成员函数。当我发表声明时
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) 我的任务是创建一个与以下相同的函数
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++ ×10
templates ×3
c++11 ×2
constructor ×2
oop ×2
base-class ×1
c++20 ×1
class ×1
constexpr ×1
for-loop ×1
if-constexpr ×1
iterator ×1
name-lookup ×1
new-operator ×1
stdvector ×1
unique-ptr ×1
vector ×1