好吧我不是一个非常有经验的C++程序员,但我想知道下面的构造函数的参数中下划线的意义是什么?
class floatCoords
{
public:
floatCoords(float _x, float _y, float _width, float _height)
: x(_x), y(_y), width(_width), height(_height)
{
}
float x, y, width, height;
...
Run Code Online (Sandbox Code Playgroud) 当我为我的头文件添加一个包含Guard的Visual C++项目时,它给了我以下警告和错误:
警告C4603:'_ MAPTEST_H':未定义宏或预编译头使用后定义不同
将宏添加到预编译头,而不是在此处定义
.\ MapTest.cpp(6):使用预编译头**//预编译头stdafx.h包含在此行中
.\ MapTest.cpp(186):致命错误C1020:意外#endif
但是当我在include guard之前添加预编译头时,不会发出警告或错误.这是什么原因?
我想读取类似这样的txt文件的每一行
1190/2132 123/23123 45
我想读取整行,然后将它们存储在三个单独的字符串中,以备将来用于构建树.我现在正在使用fgets,但是在将它放入字符串时遇到错误.我该怎么办?
我正在使用预处理器宏来声明一些重复变量,具体来说:
QuitCallbackType quitCallback;
LossCallbackType lossCallback;
PauseCallbackType pauseCallback;
KeyCallbackType keyCallback;
MouseCallbackType mouseCallback;Run Code Online (Sandbox Code Playgroud)
我想使用预处理器宏来实现它,la
CREATE_CALLBACK_STORAGE(quit)
CREATE_CALLBACK_STORAGE(loss)
CREATE_CALLBACK_STORAGE(pause)
CREATE_CALLBACK_STORAGE(key)
CREATE_CALLBACK_STORAGE(mouse)
Run Code Online (Sandbox Code Playgroud)
它本质上是这样的:
#define CREATE_CALLBACK_STORAGE(x) capitalize(x)##CallbackType x##CallBack;Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,所以我不必传递每个名称的大写和小写版本?
我意识到使用宏的打字并不多,但问题本身开始引起我的兴趣.
我有以下代码段.
template< typename T >
struct f
{
template< typename V >
struct a : f
{};
};
int main ()
{
f<int>::a<int>::a<double> x;
}
Run Code Online (Sandbox Code Playgroud)
它在GCC 4.4.5以及MSVC 2010上没有警告编译,但在GCC 4.5.2上没有 - 我得到以下错误:
test.cc: In function 'int main()':
test.cc:11:21: error: expected primary-expression before 'double'
test.cc:11:21: error: expected ';' before 'double'
Run Code Online (Sandbox Code Playgroud)
因此,虽然我没有看到任何关于它的非标准问题,但问题是强制性的 - 这在C++中是否合法?此外,如果是,我如何在GCC提交错误报告?(:
编辑:好奇的一点背景:
这应该是一块模板元编程.f基本上具有apply替换的模板元函数类的结构a(当然嵌套type的apply被省略,所以我们可以专注于结构本身).
在这种情况下,继承是用于绑定元函数返回值的标准设备.这个代码片段试图实现的是一个元函数类,在计算时递归地自我产生.
edit2:让我有点不同的相同片段:
template< typename T >
struct f
{
template< typename V > struct a; …Run Code Online (Sandbox Code Playgroud) 全局定义字符数组,并在函数内定义具有相同名称的结构.为什么sizeof运算符为c&c ++返回不同的值?
char S[13];
void fun()
{
struct S
{
int v;
};
int v1 = sizeof(S);
}
Run Code Online (Sandbox Code Playgroud)
//在C++中返回4,在C中返回13
我有重载operator <<为模板类的问题.我使用的是Visual Studio 2010,这是我的代码.
#ifndef _FINITEFIELD
#define _FINITEFIELD
#include<iostream>
namespace Polyff{
template <class T, T& n> class FiniteField;
template <class T, T& n> std::ostream& operator<< (std::ostream&, const FiniteField<T,n>&);
template <class T, T& n> class FiniteField {
public:
//some other functions
private:
friend std::ostream& operator<< <T,n>(std::ostream& out, const FiniteField<T,n>& obj);
T _val;
};
template <class T, T& n>
std::ostream& operator<< (std::ostream& out, const FiniteField<T,n>& f) {
return out<<f._val;
}
//some other definitions
}
#endif
Run Code Online (Sandbox Code Playgroud)
在主要我只是
#include"FiniteField.h"
#include"Integer.h"
#include<iostream>
using std::cout;
using …Run Code Online (Sandbox Code Playgroud) c++ templates operator-overloading visual-studio-2010 friend-function
可能重复:
如何检测两个线段相交的位置?
确定两个线段是否相交?
给定两条线l1 =((A0,B0),(A1,B1))和l2 =((A2,B2),(A3,B3)); Ax,Bx是整数,(Ax,Bx)指定行的开始和结束.
是否存在仅使用整数运算来确定l1和l2是否相交的算法?(只需要一个布尔答案.)
我自己的方法是用定点算术计算交点附近的点.然后用以下等式代替解(a,b):
I:abs((A0 + a*(A1-A0)) - (A2 + b*(A3-A2)))<公差
II:abs((B0 + a*(B1-B0)) - (B2 + b*(B3-B2)))<公差
如果I和II都评估为true,我的方法应该返回true.
我的C++ - 代码:
vec.h:
#ifndef __MY_VECTOR__
#define __MY_VECTOR__
#include <stdarg.h>
template<typename VType, unsigned int dim>
class vec {
private:
VType data[dim];
public:
vec(){}
vec(VType v0, ...){
data[0] = v0;
va_list l;
va_start(l, v0);
for(unsigned int i=1; i<dim; ++i){
data[i] = va_arg(l, VType);
}
va_end(l);
}
~vec(){}
VType& operator[](unsigned int i){
return data[i];
}
VType …Run Code Online (Sandbox Code Playgroud) 我正在读一本关于Applied C++的书.
包含防护将阻止在编译源文件期间多次包含头文件.您的符号名称应该是唯一的,我们建议您根据文件名选择名称.例如,我们的文件cache.h包含这个包含保护.
#ifndef _cache_h_
#define _cache_h_
...
#endif // _cache_h_
Run Code Online (Sandbox Code Playgroud)
Lakos描述了使用冗余包含警卫来加速编译.见[Lakos96].对于大型项目,打开每个文件需要花费时间,但却发现已经定义了包含保护符号(即,文件已经包含在内).编译时间的影响可能是戏剧性的,当只使用标准的包含防护时,Lakos显示编译时间可能增加20倍.
[Lakos96]:LargeScale C++软件设计.
我没有Lakos96参考书来引用概念,所以在这里寻求帮助.
我对上述文字的疑问是
作者的意思是"对于大型项目,打开每个文件需要花费时间,但却发现已经定义了包含保护符号"?
作者的意思是"当标准包括使用警卫时"?
谢谢你的时间和帮助.
你好!很长一段时间我很困惑!
很久很久以前,只有ansi版本就是atoi.
现在(很久以前)也有很多char版本.
但为什么宽字符版本在wtoi之前有一个uderline('_')?
谁能告诉我为什么?谢谢 :)
c++ ×9
templates ×2
visual-c++ ×2
arguments ×1
c ×1
constructor ×1
gcc ×1
geometry ×1
identifier ×1
inclusion ×1
macros ×1
syntax ×1
wchar ×1