我将用C++开始这个新项目,并且正在考虑一种不痛苦的错误处理方法.现在,我不打算开始抛出和捕获异常,并且很可能永远不会抛出异常,但我在想 - 即使是常规错误处理,为什么要自己滚动/复制粘贴一个类来描述错误/状态,当我可以使用std::exception它的子类(或者也许是一个std::optional<std::exception>)?
using Status = std::optional<std::exception>;
Status somethingThatMayFail(int x);
Run Code Online (Sandbox Code Playgroud)
有人/任何项目是这样工作的吗?这是一个荒谬的想法还是有点吱吱作响?
MCVE的言辞胜于雄辩:
// int bar();
template <bool B> class Foo {
friend int ::bar() { return 123; }
};
int main()
{
Foo<false> f1;
Foo<true> f2;
}
Run Code Online (Sandbox Code Playgroud)
与GCC 6 --std=c++14,这给了我:
a.cpp: In instantiation of ‘class Foo<true>’:
a.cpp:9:12: required from here
a.cpp:3:13: error: redefinition of ‘int bar()’
friend int ::bar() { return 123; }
^~
a.cpp:3:13: note: ‘int bar()’ previously defined here
Run Code Online (Sandbox Code Playgroud)
现在,我不确定标准是什么意思; 但是我知道编译器知道朋友没有模板化B,也没有使用它的定义B.那么为什么它不能应用"哦,函数的相同定义的所有内联副本是相同的"规则?
我是一个试图从书中学习C++的新手.下面的代码工作和预期产生输出,但也有定义两行警告engine和randomInt"具有静态存储时间'引擎’的初始化可能会引发无法捕获的异常."
如果我把线7和8的内部main(),警告完全消失,但随后engine并randomInt没有提供给getNumber.
我不知道如何修复警告.另外,也许更重要的是,randomInt在各个地方使用的正确方法是什么main()?声明它main()然后根据需要将它传递给函数是否合适?不知怎的main(),感觉不适合宣布这些类型的东西.
我之前问了一个与此类似的问题,但我仍然在努力理解,并提供了一个希望有用的例子.
// Loosely based on Fig. 6.12: fig06_12.cpp, C++ How To Program, Ninth Edition
#include <iostream>
#include <iomanip>
#include <random>
std::default_random_engine engine( static_cast<unsigned int>( time(nullptr) ) );
std::uniform_int_distribution<unsigned int> randomInt( 1, 6 );
int getNumber();
int main() {
for ( unsigned int counter = 1; counter <= 10; ++counter ) {
std::cout << std::setw( 10 ) << …Run Code Online (Sandbox Code Playgroud) 我有这个琐碎的类层次结构:
class Base {
public:
virtual int x( ) const = 0;
};
class Derived : public Base {
int _x;
public:
Derived( int x ) : _x(x) { }
int x( ) const { return _x; }
};
Run Code Online (Sandbox Code Playgroud)
如果我malloc用来分配一个实例Derived,然后尝试访问多态函数x,程序崩溃(我得到一个分段错误):
int main( ) {
Derived *d;
d = (Derived*) malloc( sizeof(Derived) );
*d = Derived( 123 );
std::cout << d->x() << std::endl; // crash
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然我的实际应用程序要复杂得多(它是一种内存池).
我很确定这是因为我分配的方式d:我没有使用new.
我知道 …
Mercurial的color 扩展很棒,但是在该页面上没有列出有效颜色的列表.我找了一个名为color的python文件,希望我能够阅读源代码并在那里看到它,但没有运气.我希望使用灰色或浅灰色作为颜色,但它无效.灰色(或灰色)似乎很可能是颜色列表中的颜色.
我在哪里可以找到color扩展名的有效颜色列表?或者我在哪里可以找到color扩展的来源?
当我使用make uninstall它卸载一个应用程序时,会留下一些make install已经创建的空目录,例如/usr/share/foo/和它的子目录/usr/share/foo/applications等等.
我通过Google发现,automake生成的uninstall目标不会自动删除空目录,因为它不知道应用程序是否拥有目录(例如,它是否在其中创建make install),或借用它(例如,存在期间的目录make install).
目前我的make文件都没有确定的uninstall目标,隐式似乎知道它必须删除哪些文件.如何教它还删除有问题的文件夹?
我开始写一些 CUDA 代码,我想对std::swap()内核中的两个变量做等价的;它们在寄存器文件中(没有溢出,不在某些缓冲区中,等等)。假设我有以下设备代码:
__device__ foo(/* some args here */) {
/* etc. */
int x = /* value v1 */;
int y = /* value v2 */;
/* etc. */
swap(x,y);
/* etc. */
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以写
template <typename T> void swap ( T& a, T& b )
{
T c(a); a=b; b=c;
}
Run Code Online (Sandbox Code Playgroud)
但我想知道 - 不是有一些内置的 CUDA 用于此功能吗?
笔记:
我是Cuda的新手,我有以下功能:
__global__ void square(float *myArrayGPU)
{
myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
}
Run Code Online (Sandbox Code Playgroud)
我想使用cuda数学库,我试过,#include "math.h"但我仍然得到错误
error: calling a __host__ function("__sqrt") from a __global__ function("square") is not allowed
知道我应该包含哪些库来使用sqrt?
作为一名GCC用户,我刚刚注意到clang支持一种uint24_t类型(stdint.h无论如何都是这样).
这是如何运作的?我的意思是,它是纯粹在内部支持,作为语言扩展,还是像C++类一样实现,有一些抽象超过3个字节或16位值和另一个8位值?并且 - 如何可能"猛拉"这样的实现并自己使用GCC?
注意:
uint_t<N>更普遍的)中有类似uint24_t的类; 我的选择是自己动手.s/uint/int/g;如果你喜欢这个问题,你可以.我正在编写这段代码,其中包含以下行:
\n\nsnprintf(target, 11, "%02ld-%02ld-19%02ld", day, month, year);\nRun Code Online (Sandbox Code Playgroud)\n\n...在验证所有 3 个值都有效后执行;具体来说,该年份介于 0 到 99 之间。
\n\n然而,最新版本的 GCC 在使用 运行时-Wextra会抱怨:
warning: \xe2\x80\x98%02ld\xe2\x80\x99 directive output may be truncated writing between 2 and 20 bytes\ninto a region of size 3 [-Wformat-truncation=]\nRun Code Online (Sandbox Code Playgroud)\n\n我宁愿不完全禁用此警告;甚至也不能在本地禁用它。相反,我想知道是否可以以某种方式“说服”GCC 这三个参数的值范围,从而防止出现警告。
\n\n是的,这是相当丑陋的重新发明轮子的代码,应该使用特定于区域设置的日期格式化例程,不需要教训我;不是我的代码。
\n