我需要一个简单的浮点舍入函数,因此:
double round(double);
round(0.1) = 0
round(-0.1) = 0
round(-0.9) = -1
Run Code Online (Sandbox Code Playgroud)
我能找到ceil()和floor()在math.h中-但不是round().
它是以另一个名称存在于标准C++库中,还是缺少?
我正在为Android编写一个应用程序来调高音量并播放45秒的歌曲然后停止.这很好,但是我只能将音量提高到50%,有没有办法使用setVolume()将音量调高到100%?
这是我的代码:
final MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
//plays eye of the tiger for 45 seconds
if (messages.contains("MUSIC ONLY")){
//turn up the volume
mp.setVolume(20, 20);
mp.start();
//play ring tone for 45 seconds
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mp.stop();
}
}, 45000);
}
Run Code Online (Sandbox Code Playgroud) 在混淆之后为什么我的代码在GCC上给了我一个模糊错误但在Clang上没有错误,我简化了代码.它可以在下面看到.
struct Foo
{
// Foo(Foo&&) = delete;
// Foo(const Foo&) = delete;
Foo(int*) {}
};
struct Bar
{
template<typename T>
operator T()
{
return Foo{nullptr};
}
};
int main() { Foo f{Bar{}}; }
Run Code Online (Sandbox Code Playgroud)
错误如下.
main.cpp:17:18: error: call to constructor of 'Foo' is ambiguous
int main() { Foo f{Bar{}}; }
^~~~~~~~
main.cpp:1:8: note: candidate is the implicit move constructor
struct Foo
^
main.cpp:1:8: note: candidate is the implicit copy constructor
main.cpp:5:1: note: candidate constructor
Foo(int*) {}
^
Run Code Online (Sandbox Code Playgroud)
这次我无法让它成功地为Clang编译,所以我想这只是一个Clang bug而且这是预期的行为.
当我明确删除副本并移动构造函数(即取消注释前两行代码)时,我得到了 …
IntelliJ IDE 有一个名为“折叠未更改的片段”的按钮,它隐藏了大多数保持不变的代码行,并以更少的空间容纳相关信息。VS Code中有类似的东西吗?如果是这样,如何启用它?
假设我们有程序void f(X2);。进一步假设我们有类型X1并且X2不共享继承层次结构。
我们想这样称呼它:f(X1{})并X1隐式转换为X2. 我们有两种选择来实现这一目标:
struct X2 {};
struct X1 { operator X2(); };
Run Code Online (Sandbox Code Playgroud)
struct X1 {};
struct X2 { X2(const X1&); };
Run Code Online (Sandbox Code Playgroud)
在实现方面,两者之间在定义顺序和访问私有数据的方式方面存在实际差异。
但从用户的角度来看,这两种方法是否会表现出不同的情况?如果是这样,两者中哪一个更可取?
即使我们对两者都进行标记,这个问题仍然是一样的explicit。然后出现的一个区别是,通过构造函数的转换仅在前一种情况下可用,但static_cast适用于任何一种情况。
c++ constructor conversion-operator implicit-conversion implicit-constructor
?Name|Age|..?
?????????????
?John?025?..?
?Carl?033?..?
?....?...?..?
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我的意思是一个具有固定列大小和可变大小的未排序行的表,可以通过 id 寻址。
C++11(或更早版本)中是否有数据结构可以表示这样的数据?
我想到了几种欺骗这种结构的方法,但没有一种是完美的。
std::vectorstd::vector<std::string> name;
std::vector<unsigned int> age;
// Write
name.push_back("John");
age.push_back(25);
// Read
std::cout << "The first entry is (" << name[0] << " | " << age[0] << ")\n";
Run Code Online (Sandbox Code Playgroud)
然而,定义一个包含多列的表需要大量的标记,并且通过调用push_back每个列来写入它std::vector真的很乏味。
std::vector的std::tuple(std::pair在这种情况下就足够了)
std::vector<std::tuple<std::string, unsigned int>> table;
// Write
table.push_back(std::make_tuple("John", 25));
// Read 1
std::string name;
unsigned int age;
std::tie(name, age) = table[0];
std::cout << "The first entry is (" …Run Code Online (Sandbox Code Playgroud) // Called with doSomething<5>();
template<unsigned i_>
void doSomething()
{
std::cout << i_ << '\n';
}
// Called with doSomething(5);
void doSomething(unsigned i_)
{
std::cout << i_ << '\n';
}
Run Code Online (Sandbox Code Playgroud)
什么时候首选第一个选项?为什么它甚至可用?我知道它对于尖括号中的参数与对象本身(而不是特定的构造函数)相关的类很有用,但是它对函数有用吗?
在下面的例子中,struct Yfoward声明的前向声明是不够的.如果你注释掉X :: b,它编译得很好,因为Y有一个完整的结构声明可以使用,但X只有前向声明.
#include <functional>
#include <iostream>
struct Y;
struct X
{
std::function<bool(Y&)> b{[] (auto& y_) { return y_.a; }};
bool a{false};
};
struct Y
{
std::function<bool(X&)> b{[] (auto& x_) { return x_.a; }};
bool a{true};
};
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是我可以提出的解决方案:
#include <functional>
#include <iostream>
struct Y;
struct X
{
X();
std::function<bool(Y&)> b;
bool a{false};
};
struct Y
{
Y();
std::function<bool(X&)> b{[] (auto& x_) { return x_.a; }};
bool …Run Code Online (Sandbox Code Playgroud) 我想创建一个div,当用户使用JS悬停在特定对象上时弹出.我知道这一切.但我的问题是,div在文本中并且在弹出时使一切变得丑陋.我希望它漂浮在文本之上.这可能与CSS有关吗?如果没有,是否可以使用插件或脚本语言?
class Base
{
virtual void bePolymorphic() = 0; // Will never be used
};
class Derived : Base
{
virtual void bePolymorphic() override {}; // I have to do this in every derived class
};
Run Code Online (Sandbox Code Playgroud)
Base如果没有任何成员函数,这是我最近用来制作抽象类的hack .
在Java中有一个abstract关键字.为什么C++中没有?还有另一种方法可以使类抽象化吗?