下面的程序在C语言中编译得很好,有警告,但是在C++中编译失败。为什么?原因何在?
#include <stdio.h>
int main(void)
{
char a[5]="Hello";
a[0]='y';
puts(a);
for(int i=0;i<5;i++)
printf("%c",a[i]);
return 0;
}
警告:
Warning:[Error] initializer-string for array of chars is too long [
第1行导致error: conversion from ‘C<void()>’ to non-scalar type ‘C<void (*)()>’ requested。我知道我可以将它写成第2行,但是如何使用make_class()并将它赋值给一个变量呢?
#include <iostream>
using namespace std;
template<class T> class C {
T f;
public:
C(T ff) : f(ff) {}
};
template<class Ft> C<
我很难理解PrototypeJS多个类实例。
下面是我的代码示例:
var Test = Class.create();
Test.prototype = {
settings: {
a: {},
b: {},
},
initialize: function(options) {
this.settings.c = options.c;
}
};
var a = new Test({c: 1});
console.log(a.settings);
var b = new Test({c: 2});
console.log(a.settings)
我现在正从底层学习Java,我发现一件有趣的事情是,必须以这种方式创建最复杂的数据结构:
ArrayList<String> list = new ArrayList<String>();
另一方面,可以简单地通过键入
String[] str_array = new String[10];
为什么没有必要在初始化数组时提供通常与调用构造函数相关联的括号?这只是一个文体上的选择吗?如果一个对JVM有更好理解的人能提供一些见解来满足我的好奇心,那就太棒了。
对于C++11 std::array,我是否保证语法std::array<T, N> x;将默认初始化数组的所有元素?
编辑:如果没有,是否有一种语法可以在所有数组(包括零大小数组)上工作,以将所有元素初始化为默认值?
编辑:在上,默认构造函数描述如下:
(constructor) (implicitly declared) (public member function)
default-constructs or copy-constructs every element of the array
所以答案可能是肯定的。但我想根据标准或未来的标准来确定这一点。
这是我想要做的:
public class myClass
{
int x;
int y;
}
我已经学会了c++,所以我试着这样做:
myClass [] a = new myClass[5];
for(int i =0; i < 4; i++)
a[i].x = 0;
这不会做任何事情,因为所有的ai都是空的。
我知道这违背了Java的基本原理,但有一个名为Alljoyn的产品,它迫使我这样做,请参阅:
AllJoyn不允许在类中使用构造函数或其他方法。有没有其他方法来初始化一个纯结构?
我偶然发现这种奇怪的行为,我找不到一个很好的解释。
下面的代码将在c++20之前成功编译,只有在使用explicit时才会失败。
struct Square {
int area = 10;
Square() = default; // only if this is explicit will the compile fail
Square(const Square& other) = delete;
Square(Square&& other) = delete;
Square& operator =(Square&&
在windows MSVC中,我试图编译以下代码。 void foo(std::vector<double> &bar){
const long int length = bar.size();
double a[length]; //error C3863: array type 'double [length]' is not assignable
for(int i=0; i < length; i++){
a[i]=0.0;
}
//do some other things
} 代码在x
给定以下代码
package parkinglottest;
public class ParkingLotTest {
public static void main(String[] args) {
ParkingLot p=new ParkingLot(15);
System.out.println(p.getMax());
Car c1=new Car(1);
Car c2=new Car(2);
p.addCar(c1);//at
当我第一次开始使用面向对象的编程语言时,我得到了以下规则:
在类中声明字段时,不要初始化它。在构造函数中这样做。
C#中的一个例子:
public class Test
{
private List<String> l;
public Test()
{
l = new List<String>();
}
}
但最近有人问我为什么要这么做,我想不出原因。我不太熟悉C# (或其他编程语言)的内部工作,因为我认为这可以在所有OO语言中实现。
那为什么要这么做?是保安吗?财产?
我正在将C++代码移植到C#中,我在C++代码中看到了这一点,
SHELLEXECUTEINFO shell;
memset(&shell, 0, sizeof(shell));
//the properties in shell are set
ShellExecuteEx(&shell);
所以现在我使用Process.Start()和ProcessStartInfo作为C#代码。我是否必须为ProcessStartInfo分配内存,还是在调用ProcessStartInfo构造函数时为我分配内存?为了满足我的好奇心,这种在C++中使用C++的方式是一种非托管语言的实践,还
在C++中,有没有一种方法可以让对象在其上添加参数,并使用如下数组:
int x = 1;
int y = 2;
Object myObject( x, y )[5]; // does not work
我希望我可以把参数放到对象中,同时创建一个由5个对象组成的数组,有人知道怎么做吗?有没有更好的办法呢?
C++枚举类型似乎是“默认可构造的”:
enum UE { a=1, b, c };
enum class SE { a=1, b, c };
int main() {
UE ue;
SE se;
}
如何从标准中解释这一点?
我的意思是-假设我们想要改变标准,使它不是默认的可构造的。哪些条款会改变?