我正在编写一组充当接口的纯虚拟类。这个想法是,实现此类接口的代码可以使用不同的构建配置、编译器,甚至不同的 STL 实现来构建,以通过此类接口使用此类对象。
像和一样的普通旧数据uint32_t是标准化的。(不是因为标准没有说明它的大小。)doublefloatbool
属于哪个类别std::size_t?它纯粹是机器架构的功能吗?例如,在 32 位机器上,它可能sizeof(std::size_t)不是 4?
在Java中,我需要在编译时构造一个未知的n零字符串。n理想情况下我会使用
String s = new String('0', n);
但这样的构造函数不存在。CharSequence似乎也没有合适的构造函数。所以我很想使用 构建自己的循环StringBuilder。
在我冒着被老板抛弃的风险这样做之前,有人可以建议一下:Java 中有这样做的标准方法吗?在 C++ 中,构造函数之一std::string允许这样做。
我用Java编写了一个double[] foo.
是否有用于提取此数组中最小值的库函数?我知道我可以建立一个,但如果库函数可用,这不是一个好习惯.什么都没有java.util.Arrays.
(在C++中我们有std::min_element等等,甚至是C++ 11中的一个新函数,可以同时获得最小值和最大值!)
考虑
template<class Y> struct foo
{
template <class ForwardIt>
foo(ForwardIt first, ForwardIt last);
};
Run Code Online (Sandbox Code Playgroud)
为了实现构造函数,我写了
template<class Y, class ForwardIt> foo(ForwardIt first, ForwardIt last)
{
// ToDo - code here
}
Run Code Online (Sandbox Code Playgroud)
但是这会产生编译错误,导致它无法将该定义与声明匹配.
我究竟做错了什么?我正在使用C++ 11编译器.
我正在玩一个小班Foo,正在考虑写作register Foo foo;.
我知道,为了register实际工作,你不能拿地址foo.
但是在编译时并没有强制执行.我有什么方法可以禁止服用&foo吗?
我有这个:
switch (account){
case 08120:
// Savings deposit interest rate
return null;
case 13100:
// Receivables contractual interest
return null;
case 16550:
// Default management process accounts payable
return null;
}
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨整数08120太大了!
到底是怎么回事?
考虑
#include <iostream>
struct Foo
{
int* n;
Foo(){n = new int{};}
~Foo(){delete n;}
int& get()
{
int* m = n;
return *m;
}
};
int main()
{
Foo f;
std::cout << f.get();
}
Run Code Online (Sandbox Code Playgroud)
这是管理指针的类的简化版本,并具有返回对取消引用的指针的引用的方法。
这是定义的行为吗?
考虑一种默认值Bar:
struct Bar
{
};
Run Code Online (Sandbox Code Playgroud)
以及 a 的特定情况Bar,MyBar它有一个需要 : 的构造函数int:
struct MyBar
{
MyBar(int n){}
};
Run Code Online (Sandbox Code Playgroud)
然后我有一个使用以下内容的类Bar:
template<class ThisBar = Bar> struct Foo : ThisBar
{
Foo(double){}; // Construct the 'Foo' from a 'double'
};
Run Code Online (Sandbox Code Playgroud)
但一个障碍是,如果我想要一个,Foo<MyBar>我需要能够构建MyBar:
Foo<MyBar> f(1.0, 1);
Run Code Online (Sandbox Code Playgroud)
其中int用来构造MyBar。我的问题是如何编写这个构造函数,以便下面的代码可以在 C++17 中编译?
int main()
{
Foo<MyBar> f(1.0, 1);
}
Run Code Online (Sandbox Code Playgroud) 我有一个const unsigned char* bar以null结尾的字符缓冲区.
我需要将其复制到一个std::string.目前我用
std::string foo;
foo.assign(bar);
Run Code Online (Sandbox Code Playgroud)
但由于各种原因(由于bar),值> 127的奇数字符出现在列表中.用32(空格)替换这些字符就足够了,完全省略它们是可取的.
有没有办法可以替代
我复制到字符串后.使用类似的东西std::replace(foo.begin(), foo.end(), /*something funky*/)
当我这样做时,使用某种谓词"后插入器" assign.
我更喜欢(2)行.在我深入研究一个for循环之前,有没有更像stl的方式我可以做到这一点?
这个for循环总是立即崩溃:
for (auto i = v.size() - 1; i >=0; --i);
Run Code Online (Sandbox Code Playgroud)
显然,我在循环中有一整堆代码,而v是双精度矢量.我试图以相反的顺序迭代它们.
这里发生了什么?