我正在尝试random在编译时使用C++ 11的库预先计算随机值.我主要是按照例子.我在这做错了什么?
using namespace std;
#include <iostream>
#include <vector>
#include <random>
vector<double> rands;
typedef std::mt19937_64 RNG;
uint64_t seed_val;
RNG rng;
void initialize() {
rng.seed(seed_val);
}
constexpr vector<double> generate_random( ) //size_t numbers)
{
int numbers = 1000;
std::uniform_real_distribution<double> zero_one(0.0, 1.0);
for (unsigned int i = 0; i < numbers; i++) {
double rand_num = zero_one(rng);
rands.push_back( rand_num );
}
return rands;
}
int main()
{
cout << "TMP rands";
for_each( rands.begin(), rands.end(), [] (double value)
{
cout<<value<<endl;
});
} …Run Code Online (Sandbox Code Playgroud) 我正在处理一个大型代码库,它始终使用以下构造
class MyClass
{
public:
void f(int x);
private:
int x;
};
void MyClass::f(int x)
{
'
'
this->x = x;
'
'
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我总是使用,因此更喜欢这种形式
class MyClass
{
public:
void f(int x);
private:
int _x;
};
void MyClass::f(int x)
{
'
'
_x = x;
'
'
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢后者的原因是它更简洁(更少的代码=更少的潜在错误),并且我不喜欢在范围内同时拥有多个同名的变量,我可以避免它.也就是说,我现在越来越多地看到以前的用法.我不知道第二种方法有什么好处吗?(例如,对编译时的影响,使用模板化代码等等)两种方法的优点是否足够重要,另一方面是否重构?我要问的原因是,虽然我不喜欢代码中存在的第二种方法,但是引入更多错误的工作量和相关风险并不值得重构.
在许多具有简单OO功能(PHP 4)或误解OO功能(使用函数指针等的Javascript,C)的语言中,您最终会得到一个使用前导下划线来表示权限级别的函数命名约定.
//ex.
function _myPrivateFunction(){
}
Run Code Online (Sandbox Code Playgroud)
虽然各个团队总是会提出这样的命名惯例,但是下划线惯例看起来如此普遍,以至于让我很好奇
除了纯粹的好奇心之外,我在一些我正在处理的代码库中看到了这一点,并且我想了解最初提出它的开发人员可能的顶空.
我正在使用错误代码来处理我的c ++项目中的错误.问题是如何从一个应该返回一些变量/对象的函数返回错误代码.
考虑一下:
long val = myobject.doSomething();
Run Code Online (Sandbox Code Playgroud)
在这里,myobject是某个类的对象.如果doSomething函数遇到某些错误条件,那么它应该如何通知调用者(不使用异常).
可能的解决方案:
现在如何通知调用者一些错误情况?
C++如何包含通常命名的守卫?我倾向于看到这么多:
#ifndef FOO_H
#define FOO_H
// ...
#endif
Run Code Online (Sandbox Code Playgroud)
但是,我认为这不是很直观.如果没有看到文件名,就很难分辨出它的含义FOO_H和名称所指的含义.
什么是最佳做法?
我目前正在尝试按照教程为自上而下的RPG制作一个简单的2D磁贴引擎.出于某种原因,虽然我得到了智能感知错误
vector is not a template
"向量"一词用红色加下划线.为什么这不起作用?为什么它告诉我它是一个模板,为什么程序不起作用?
#ifndef _IMAGEMANAGER_H
#define _IMAGEMANAGER_H
#include <vector>
#include <SFML\Graphics.hpp>
class ImageManager
{
private:
vector<sf::Texture> textureList;
public:
ImageManager();
~ImageManager();
void AddTexture(sf::Texture& texture);
sf::Texture& GetTexture(int index);
};
#endif
Run Code Online (Sandbox Code Playgroud)
我得到的错误(毫无疑问,其中一些错误来自上面这部分的错误):
错误1错误C2143:语法错误:缺少';' 在'<'c:\ users\vipar\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app
错误2错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持default-int c:\ users\vipar\dropbox\computer
science\programming\visual studio
2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app错误3错误C2238:';'之前的意外令牌 c:\ users\vipar\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app
错误4错误C2143:语法错误:缺少';' 在'<'c:\ users\vipar\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app
错误5错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持default-int c:\ users\vipar\dropbox\computer
science\programming\visual studio
2012\projects\sfml-app\sfml-app\imagemanager.h 10 …
锁定状态很棒.在C#中,一旦构造函数通过声明为完成,就可以确保字段不会更改它的值/引用readonly.
class Foo
{
private readonly string _foo;
public Foo() {
_foo = "Unchangeable";
}
public void ChangeIt() {
_foo = "Darn"; // compiler error
}
}
Run Code Online (Sandbox Code Playgroud)
我可以用C++做同样的事情吗?如果是这样,怎么样?如果没有,为什么不呢?
我知道这对项目没有什么影响,但是,假设您使用#defined标头保护C++代码,您使用什么格式?例如假设一个标题foo.hpp:
#ifndef __FOO_HPP__
...
#ifndef INCLUDED_FOO_HPP
...
#ifndef SOME_OTHER_FORMAT
Run Code Online (Sandbox Code Playgroud)
我卖的是关于大写#defines的想法,但不能解决这些守卫的格式.
class MyObj{
public:
void myFunc(){
//ToBeExecutedJustOnce
}
};
Run Code Online (Sandbox Code Playgroud)
我有一个函数,我想在生命周期中只执行一次MyObj.可能有许多实例MyObj,并且每个实例应该能够执行一次该功能.所以,如果我有:
MyObj first;
MyObj second;
MyObj third:
first.myFunc(); // Should execute
second.myFunc(); // Should execute
third.myFunc(); // Should execute
first.myFunc(); // Should not execute
second.myFunc(); // Should not execute
third.myFunc(); // Should not execute
Run Code Online (Sandbox Code Playgroud)
选项:
MyObj可以访问它并更改它.我找到的唯一解决方案是MyObj从另一个类继承
MyOtherObj{
private:
bool _isInit = false;
public:
bool isInit(){
bool ret = true;
if (!_isInit){
ret = false;
_isInit = true;
}
return ret; …Run Code Online (Sandbox Code Playgroud) 我正在阅读zmq的源代码,并遇到了以下内容 typedef
typedef struct {unsigned char _ [32];} zmq_msg_t;
Run Code Online (Sandbox Code Playgroud)
我不明白下划线在这个定义中意味着什么.有人可以帮忙解决一些问题吗?