小编Sho*_*hoe的帖子

如何在C++中"返回一个对象"?

我知道标题听起来很熟悉,因为有很多类似的问题,但我要问问题的不同方面(我知道在堆栈上放置东西并将它们放在堆上之间的区别).

在Java中,我总是可以返回对"本地"对象的引用

public Thing calculateThing() {
    Thing thing = new Thing();
    // do calculations and modify thing
    return thing;
}
Run Code Online (Sandbox Code Playgroud)

在C++中,要做类似的事情,我有2个选项

(1)每当我需要"返回"一个对象时,我都可以使用引用

void calculateThing(Thing& thing) {
    // do calculations and modify thing
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

Thing thing;
calculateThing(thing);
Run Code Online (Sandbox Code Playgroud)

(2)或者我可以返回指向动态分配对象的指针

Thing* calculateThing() {
    Thing* thing(new Thing());
    // do calculations and modify thing
    return thing;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

Thing* thing = calculateThing();
delete thing;
Run Code Online (Sandbox Code Playgroud)

使用第一种方法我不必手动释放内存,但对我而言,它使代码难以阅读.第二种方法的问题是,我必须记住delete thing;,这看起来不太好.我不想返回复制的值,因为它效率低(我认为),所以这里提出问题

  • 是否有第三种解决方案(不需要复制值)?
  • 如果我坚持第一个解决方案,有什么问题吗?
  • 何时以及为什么要使用第二种解决方案?

c++ performance return reference

155
推荐指数
5
解决办法
8万
查看次数

按返回类型重载

我在这里读到了几个关于这个主题的问题,这个问题似乎让我感到困惑.我刚刚开始学习C++,我还没有学过模板或运算符重载等等.

现在有一种简单的重载方式

class My {
public:
    int get(int);
    char get(int);
}
Run Code Online (Sandbox Code Playgroud)

没有模板或奇怪的行为?或者我应该

class My {
public:
    int get_int(int);
    char get_char(int);
}
Run Code Online (Sandbox Code Playgroud)

c++ overloading

74
推荐指数
6
解决办法
7万
查看次数

是否可以确定c ++枚举类的元素数量?

是否有可能确定c ++的基数enum class:

enum class Example { A, B, C, D, E };
Run Code Online (Sandbox Code Playgroud)

sizeof但是,我尝试使用它返回枚举元素的大小.

sizeof(Example); // Returns 4 (on my architecture)
Run Code Online (Sandbox Code Playgroud)

有没有一种获得基数的标准方法(在我的例子中为5)?

c++ cardinality c++11 enum-class

64
推荐指数
7
解决办法
4万
查看次数

何时使用Try Catch块

好吧,这可能是一个非常noob的问题,但我发现PHP文档和几个Internet搜索没有给我任何想法.

我什么时候应该使用try-catch块来改善我的应用程序?

我读过有人说我们应该只使用try-catch块来防止致命错误.我读到其他人说我们应该只在意外错误上使用它(等待什么?意外?如果它们是意外错误我怎么能用try-catch阻止它们?我应该把所有应用程序代码放在try块中吗?).其他人只是说try-catch块应该在任何地方使用,因为它们也可以扩展(扩展Exception类).最后有人说PHP try-catch块完全没用,因为它们实现得非常糟糕.(在此我发现了一个关于性能的好问题).

在我看来,这个话题非常奇怪和困惑.有人会点亮我吗?

php try-catch

61
推荐指数
3
解决办法
2万
查看次数

什么是非弱化背景?

我最近接触过这个问题,答案可以概括为"这是一个非受限的背景".

具体来说,第一个说它是这样的东西,然后重定向到"细节"的标准,而第二个引用标准,这至少可以说是神秘的.

有人可以向凡人解释,比如我自己,什么是非受限的背景,什么时候发生,为什么会发生?

c++ templates template-argument-deduction argument-deduction

57
推荐指数
1
解决办法
4611
查看次数

自动加载器的功能

上周我学会了通过编写__autoload()函数将类包含在项目中.然后我了解到使用自动加载器不仅是一种技术,也是一种模式.

现在我在我的项目中使用自动加载器,我发现它非常有用.我想知道是否可以用功能做同样的事情.忘记在其中包含正确的PHP文件可能非常有用.

那么,是否可以创建一个功能自动加载器?

php class function autoloader

55
推荐指数
4
解决办法
2万
查看次数

如何在运行时向属性添加属性

//Get PropertyDescriptor object for the given property name
var propDesc = TypeDescriptor.GetProperties(typeof(T))[propName];

//Get FillAttributes methodinfo delegate
var methodInfo = propDesc.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public |
                                                      BindingFlags.NonPublic)
    .FirstOrDefault(m => m.IsFamily || m.IsPublic && m.Name == "FillAttributes");

//Create Validation attribute
var attribute = new RequiredAttribute();
var  attributes= new ValidationAttribute[]{attribute};

//Invoke FillAttribute method
methodInfo.Invoke(propDesc, new object[] { attributes });
Run Code Online (Sandbox Code Playgroud)

您好我正在尝试使用上面的代码在运行时添加Validation属性.但是我得到以下例外:

收集是固定的大小

c# attributes

51
推荐指数
4
解决办法
6万
查看次数

为什么要使用匿名功能?

可能重复:
你如何在PHP中使用匿名函数?

我为什么要使用匿名函数?我的意思是,使用它的真正优惠是什么?我真的不明白这一点.我的意思是,你使用函数使代码更干净或多次使用它.但匿名函数不是第一个也不是第二个.我用谷歌搜索了他们,我找不到有人问同样的问题.

php closures design-patterns anonymous-function

46
推荐指数
4
解决办法
2万
查看次数

如何使Apache服务index.php而不是index.html?

如果我将以下行放在一个index.html文件中,要使Apache包含该index.php文件:

  <?php include("/Live/ls_client/index.php"); ?>    
Run Code Online (Sandbox Code Playgroud)

访问index.html该页面向我显示:

<!--?php include("/Live/ls_client/index.php"); ?-->
Run Code Online (Sandbox Code Playgroud)

这是为什么?为什么它实际上不包含PHP文件?

php apache include

37
推荐指数
3
解决办法
11万
查看次数

我应该如何将一个DbContext实例注入IHostedService?

我应该如何将一个DbContext实例注入(使用标准依赖注入)IHostedService

我试过了什么

我目前让我的IHostedServiceMainContextDbContext构造函数中获取(派生自)实例.

当我运行应用程序时,我得到:

无法从singleton'Microsoft.Extensions.Hosting.IHostedService'中使用作用域服务"Microsoft.EntityFrameworkCore.DbContextOptions".

所以我试着DbContextOptions通过指定来制作瞬态:

services.AddDbContext<MainContext>(options => 
                options.UseSqlite("Data Source=development.db"), ServiceLifetime.Transient);
Run Code Online (Sandbox Code Playgroud)

在我Startup班上

但是错误仍然是相同的,即使根据这个解决的Github问题,DbContextOptions传递的应该具有在AddDbContext调用中指定的相同生命周期.

我无法使数据库上下文成为单例,否则对它的并发调用将产生并发异常(由于数据库上下文不保证是线程安全的事实).

.net c# asp.net .net-core asp.net-core

36
推荐指数
2
解决办法
1万
查看次数