所以我正在创建一个简单的程序,我通常使用GNU编译器.
但是,这次我选择使用Visual C++在C中进行开发.
我已正确设置项目,更改设置以使其在C中编译.代码非常简单:
#include <stdlib.h>
#include <stdio.h>
int main(){
printf("Hey!");
int x = 9;
printf("%d",x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用Code :: Blocks IDE和GNU编译器编译它,它可以工作,但由于某种原因它在Visual C++中不起作用.我一直收到这些错误:
error C2143: syntax error : missing ';' before 'type'
error C2065: 'x' : undeclared identifier
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
想知道如果我写下以下内容并运行程序会发生什么.
new int[5]; // without assigning it to a pointer.
Run Code Online (Sandbox Code Playgroud)
汇编通过了.
但是会5 * sizeof(int)分配一大块内存吗?
如果它是一个对象怎么办?
new some_obj_[5]; // without assigning it to a pointer.
Run Code Online (Sandbox Code Playgroud)
是否会some_obj_调用构造函数?
在做我的作业时,我注意到一些非常奇怪的东西,我无法弄清楚为什么.
int x = 5;
cout << pow(x, 2);
Run Code Online (Sandbox Code Playgroud)
结果是25.那没关系.但如果我写这样的程序:
int x = 5;
int y = pow(x, 2);
cout << y;
Run Code Online (Sandbox Code Playgroud)
结果是24!
当x为2,3,4,6,7,8没有问题,但是5,10,11,13等结果比它应该低1.
if()也是一样的.
for (int x = 1; x <= 20 ; x++) {
if (x * x == pow(x, 2))
cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)
它打印出数字1,2,3,4,6,8,12,16.
我知道你不能在不使用构造函数的情况下直接在类中初始化成员变量(静态常量除外)。
但只是想知道这背后的原因是什么。下面是代码片段
如果有任何机构可以提供帮助
class a
{
int c=5;
// giving error error C2864: 'a::c' : only static const integral data members can be
// initialized within a class
int b;
public:
a():c(1),b(2){}
void h()
{
printf("%d,%d",c,b);
}
};
int main()
{
a l;
l.h();
getchar();
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读这里的boost DateTime库,其中包含许多示例,例如:
time_zone_ptr zone(new posix_time_zone("MST-07"));
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么使用关键字'new'不会导致内存泄漏?我调查了boost源代码,并注意到它有两个不同版本的构造函数,一个使用shared_ptr,另一个使用weak_ptr.有人可以解释一下这些是如何工作的,为什么上面这行可以安全写?
是否可以将构造函数与固定参数和构造函数模板混合使用?
我的代码:
#include <iostream>
class Test {
public:
Test(std::string, int, float) {
std::cout << "normal constructor!" << std::endl;
}
template<typename ... Tn>
Test(Tn ... args) {
std::cout << "template constructor!" << std::endl;
}
};
int main() {
Test t("Hello World!", 42, 0.07f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给了我"模板构造函数!".有没有办法,我的普通构造函数被调用?
我有一个std::set存储std::pair两个整数的s.该std::set还排序,允许我通过一个帮扶类.但是,到目前为止,我已经编写了许多代码行,现在,在最后的测试中,"他们"告诉了我一些事实,这实际上意味着我需要允许重复std::set.当然,这不是完成的std::set.任何不会让我改变整个大项目的替代方案?
简而言之,我使用std::set带有std::pair两个整数的数据的有序列表.
考虑功能template<typename T> void Fun(T t);.我怎样才能分别为整数和浮点类型实现它的不同实现?
我猜积木是std::enable_if,std::is_integral,std::is_floating_point.但我不能以优雅的方式把它们放在一起:-(.
PS我有C++ 11可用.
我有一个带有私有属性的类,它是一个向量.做getter函数的最佳方法是什么?
vector<char*> getNames() { return names; }
vector<char*>::iterator getNames() { return names.begin(); }我一直在阅读C++ vol1中的Thinking,并且有一个名为Complicated声明和定义的部分描述了以下表达式,我无法理解:
void * (*(*fp1)(int))[10];
float (*(*fp2)(int,int,float))(int);
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释表达式的含义,以及如何解决这些表达式?
布鲁斯给出的解释如下:
fp1是一个指向函数的指针,该函数接受一个整数参数并返回一个指向10个void指针数组的指针.
fp2是一个指向函数的指针,该函数接受三个参数(int, int, and float)并返回一个指向函数的指针,该函数接受一个整数参数并返回一个float
虽然我已经发布了正确答案,但如果有人能够逐步演示这些表达式的解码,我将不胜感激.