在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.
C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?
来自Java背景,我发现C++的枚举非常蹩脚.我想知道如何在C++中编写类似Java的枚举(枚举值是对象,可以有属性和方法).
例如,将以下Java代码(其中一部分,足以演示该技术)转换为C++:
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);
private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
private double mass() { return mass; }
private double radius() { return radius; }
// universal gravitational constant (m3 kg-1 s-2)
public static final …Run Code Online (Sandbox Code Playgroud) 我想使用constexpr填充一个枚举数组.阵列的内容遵循某种模式.
我有一个枚举将ASCII字符集分为四类.
enum Type {
Alphabet,
Number,
Symbol,
Other,
};
constexpr Type table[128] = /* blah blah */;
Run Code Online (Sandbox Code Playgroud)
我想有一个128的数组Type.它们可以是一个结构.数组的索引将对应于ASCII字符,值将是Type每个字符的值.
所以我可以查询这个数组,找出ASCII字符属于哪个类别.就像是
char c = RandomFunction();
if (table[c] == Alphabet)
DoSomething();
Run Code Online (Sandbox Code Playgroud)
我想知道如果没有一些冗长的宏观黑客,这是否可行.
目前,我通过执行以下操作来初始化表.
constexpr bool IsAlphabet (char c) {
return ((c >= 0x41 && c <= 0x5A) ||
(c >= 0x61 && c <= 0x7A));
}
constexpr bool IsNumber (char c) { /* blah blah */ }
constexpr bool IsSymbol (char c) { /* blah blah */ } …Run Code Online (Sandbox Code Playgroud) 我需要用C++读写二进制数据.我使用from ofstream和ifstreamclasses但它不能读取像9,13,32这样的字符.如果有另一种方法来读写主题.
该std命名空间是C++特殊,所以......
这是合法的C++吗?
// at global scope
namespace mine {
namespace std {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我称之为疯狂,但允许吗?
可以理解标准的参考(或非参考).
我是一个C++菜鸟,我想知道如何从C++函数返回一个数组.
我尝试了以下代码,但似乎没有用.
char some_function(){
char my_string[] = "The quick brown fox jumps over the lazy dog";
return my_string;
}
Run Code Online (Sandbox Code Playgroud) 我刚刚阅读了关于rvalue引用的内容,下面是我所指的代码
vector<string> v;
string s = "hello";
v.push_back(s);
cout << s << endl;
cout << v[0] << endl;
return 0
Run Code Online (Sandbox Code Playgroud)
我的问题是,到目前为止,每当我看到对象(或字符串)的向量时,我主要看到插入操作如上所述.相反,如果我这样做,v.push_back(std::move(s))那么我不会不必要地创建重复的对象.
这应该是向STL添加对象的正确方法,我们关心的只是容器中的数据而不是其他变量.
namespace Stuff
{
class Sprite
{
};
class Circle : Stuff::Sprite
{
};
}
Run Code Online (Sandbox Code Playgroud)
这会工作,还是会找到Stuff :: Stuff :: Sprite?
编辑:忘了一些分号.
编辑2:我接受了@Omnifarious的答案,因为一旦他用@ Vlad的帮助编辑了它,这是最完整的答案.还要感谢@Vlad.