我在初始化嵌套类构造函数时遇到了问题。
这是我的代码:
#include <iostream>
using namespace std;
class a
{
public:
class b
{
public:
b(char str[45])
{
cout<<str;
}
}title;
}document;
int main()
{
document.title("Hello World"); //Error in this line
return 0;
}
我偶然发现了这段代码,我想知道T()是如何用不同的数据类型解释的?
template <typename T>
class MyClass {
T _val;
std::string _message;
// constructor
MyClass(std::string const &msg, T defaultVal = T())
: _val(defaultVal), _message(msg)
{
// some code that will use msg and defaultVal
}
class Itembuilder
{
private:
int numOfX;
int numOfY;
int numOfZ;
int numOfSpc;
int itemMatrix [numOfZ][numOfY][numOfX];
public:
void build (Space spc, Item item)
{
numOfX = item.getX()/spc.getX(); //number of space requirement for X origin
numOfY = item.ge
我正在用NET5.0测试c# 9.0,有些东西我不明白。我启用了<nullable>enable</nullable>。
如果我写一堂课
public class Potato {
public string Colour { get; set; }
public string Flavour { get; set; }
}
我收到警告CS8618: Non-nullable propery 'Colour' must contain a non-null value when existing constructor. Consid
我有以下课程:
class ArithmeticExpression
{
public:
ArithmeticExpression(std::string expr);
}
class Command
{
public:
Command(){};
//this is a virtual class
}
class CommandAssign : public Command
{
private:
ArithmeticExpression expr;
public:
CommandAssign();
CommandAssign(Arithm
我知道这类问题被问了很多次,我读过关于它的不同答案,以及ISO标准的一些部分。
但是,我仍然需要对所期望的C++标准的确切行为做一些澄清。
假设这一点:
class A
{
public:
A( void ) {}
A( const A & a ) {}
};
class B: public A
{
public:
B( void ) {}
B( const B & b ) {}
};
我知道调用B类的复制构造函数不会调用A类的复制构造函数,我们可以使用初始化列表来正确地完成它。
我还知道如何
我正在移植遗留的C++代码,以便使用GCC 9.2。使用C++20和GNU扩展是有效的选项。
遗留代码大量使用嵌套在联合中的匿名结构,并使用指定初始化的聚合初始化,例如:
union u
{
int a;
struct
{
int b;
int c;
};
};
u f = { .b = 1, .c = 2 };
此示例执行,但不执行
错误:“u”的初始化器太多了
由于在代码中应用此类构造的情况很多,因此有必要以自动化的方式(例如在正则表达式的帮助下)将潜在的更改应用到代码中。我如何用GCC 9.2编译“这段代码”,方法
在我看来,在实践中经常会遇到这种情况,我想知道是否存在以下设计模式:
假设我有一个代表卡片的类:
public class Hand {
private static Random rng;
private Rank rank;
private Suit suit;
public Hand() {
if (prng == null)
prng = new Random();
}
//more stuff
}
}
每次我实例化一张卡片时,我都想要一张随机卡片。通过上述方式,每次实例化都
我有:
class Foo;
class Bar {
Foo foo;
Bar(): foo(foo) {};
}
Bar bar;
在这里,是
bar.foo // <--- how is this initialized?
这个问题是由一个错误的引用计数指针实现引起的;我可以发誓我确保每个指针都指向某个非空的指针;但我最终得到了一个指向某个空的指针。
我尝试使用纯init属性来强制客户端代码在创建类时初始化类,但没有构造函数。不像我计划的那样。
这是一堂课,为了说明这一点,我们对其进行了简化。
public class Target
{
public int Id { get; init; }
public string Name { get; init; }
}
这个项目在.NET 6.0上,所以我使用C# 10.0。Nullable在项目上被设置为“已启用”,因此引用属性Name必须为非空。令我困惑的是,编译器抱怨在构造函数
我已经试着学了大约一个月的C++,它仍然困扰着我。例如,这段“容易”的代码:
class A
{
int m;
public:
A() = default;
int getM() { return m; }
};
class B
{
int m;
public:
// empty body and empty initializer list
B() {} // isn't this the same as "B() = default;" ?
int getM() { return m; }
};
int
我有一个函数返回模板类型的缺省构造值:
template<typename T>
T do_stuff()
{
return T();
}
我就是这样用的:
int main(int argc, char** argv)
{
std::string str("hello");
int a = 10;
int *p = &a;
str = do_stuff<std::string>();
a = do_stuff<int>();
p = do_stuff<int*>(
查看Linkedlist.java,我观察到重载的构造函数,其中一个包含空的this()。通常,我在默认参数中看到过这种情况。这个()没有对角线有什么用呢?
/**
* Constructs an empty list.
*/
public LinkedList() {
}
/**
* Constructs a list containing the elements of the specified
* collection, in the order they are returned by the collection&
根据
在文档提供的示例中:
std::string s; // is first zero-initialized to indeterminate value
// then default-initialized to ""
如果语法是针对string s;的,为什么static T object;会出现零初始化?
为什么零初始化发生在默认初始化之前,为什么两者都被允许发生?
零初始化的影响是:
如果T是标量类型,则对象的初始值是显式转换为T的积分常数零。
如果T是一个非并类类型,那么所有基类和非静态数据成员都是零初始
这是专门针对C++11的:
#include <iostream>
struct A {
A(){}
int i;
};
struct B : public A {
int j;
};
int main() {
B b = {};
std::cout << b.i << b.j << std::endl;
}
用g++ 8.2.1编译:
$ g++ -std=c++11 -pedantic-errors -Wuninitialized -O2 a.cpp
a.cpp: In function ‘int ma
我有A类和B类。B是A的成员。我需要用A的其他数据成员初始化B。
class A;
class B
{
public:
B(A& a){cout << "B constr is run \n";}
};
class A
{
public:
A(){}
void initB(A& a){b(a); cout << "A call init B \n"; }
private:
// other members ...
B b;
};
int main()
{
A a
对象初始化器语法有一个奇怪的问题。
下面是我的示例类:
public class Foo
{
public Bah BahProp { get; set; }
}
public class Bah
{
public int Id { get; set; }
}
考虑以下三种初始化对象的方法:
旧的,冗长而明确的方式,正确地工作:
var foo1 = new Foo();
foo1.BahProp = new Bah();
foo1.BahProp.Id = 1;
// correctly initialized
我经常使用的第二种方法是使用语法:
var foo2 = ne
构造函数没有返回类型,但是我想知道为什么这个代码部分会正常编译?
这是代码示例
class B
{
public:
int c;
int b;
public:
B(){c = 5; b = 10; std::cout << "B ctor" << std::endl;}
};
B b = B(); // this part ?
std::cout << "a=: " << b.a << std::endl;
// or
我有一个类层次结构,其中在派生类中声明了Dog类的一个对象。然后,将该对象提供给初始化列表中的基类。
因为在调用基类构造函数之前没有构造Dog类对象,所以该对象不应该有任何用处。但是,我看到,该对象可以用于以下代码:
#include <iostream>
using namespace std;
class Dog {
public:
Dog() {cout << "\n In Dog";}
void dfoo(){cout << "\n In dfoo";};
};
class