在一个程序中,我大量使用了 std 库。我想命名一个函数less(),但是它已经被接受了std。我可以在后面添加一行using namespace std;,以便稍后声明less()。
目前我收到“错误:对‘less’的引用不明确”。
我知道我可以列出我正在使用的所有内容(例如using std::cout;),我只是想问是否有一个“否定”版本。
谢谢你,丹尼尔
using语句不捕获异常.要捕获异常,您有两种选择:
1)打开使用并手动实现:
void MyFunc()
{
StreamReader myReader = null;
try
{
myReader = new StreamReader(path);
//use myReader
}
catch (Exception e)
{
//do something with exception
}
finally
{
if (myReader != null)
myReader.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
或2)保持使用,并将其包装在另一个try catch块中
void MyFunc()
{
try
{
using (StreamReader myReader = new StreamReader(path))
{
//use myReader
}
}
catch (Exception e)
{
//do something with exception
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,第二个看起来更整洁,特别是当你有多个using语句时,因为它更好地描述了流,并删除了显式声明,空检查和Dispose()调用.
但是,由于额外的尝试捕获开销有效地冗余,因此感觉不对.
什么是标准做法?
我确信那里有答案......但谷歌搜索"C#使用"比你想象的要复杂一点.
无论如何......前几天真正开始学习这种方便的技术,似乎我不会将它用于我的代码中的任何非原始对象.
这是一个相当准确的陈述还是有一些缺点(在稍微混乱的代码之外)使用"使用"几乎所有东西?
我知道标题有点模糊,但我现在想不出更好的标题.我的代码中的摘录如下所示:
#include<iostream>
#include<fstream>
int main(){
ifstream f("cuvinte.txt");
f.getline(cuvant);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我想阅读"cuvinte.txt"中的下一个单词时,我写了f.getline(cuvant); 但我得到以下错误
error C2661: 'std::basic_istream<_Elem,_Traits>::getline' : no overloaded function takes 1 arguments
Run Code Online (Sandbox Code Playgroud)
我不知道问题是什么,我不久前偶然发现了这个问题,仍然无法超越它.
可能重复:
什么是C#使用块,为什么要使用它?
如果我运行以下代码:
using (SPWeb web = SPContext.Current.Site.OpenWeb("/myweb")){
//error happens here
}
Run Code Online (Sandbox Code Playgroud)
如果在结束括号之前发生错误web,是否会正确处理对象?
我们被告知使用对象的using语句OpenWeb是最好的,但
我们在日志中看到很多关于SPRequests和SPWeb的错误.
我正在编写一个Sql-Server-ce应用程序C#.
最近我一直在将我的代码转换为使用using语句,因为它们更清晰.在我的代码中,我有一个GetLastInsertedID非常简单的函数 - 它返回最后插入的ID.工作版本如下:
public static int GetLastInsertedID()
{
int key = 0;
try
{
SqlCeCommand cmd = new SqlCeCommand("SELECT CONVERT(int, @@IDENTITY)", DbConnection.ceConnection);
key = (int)cmd.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show("Could not get last inserted ID. " + ex.Message);
key = 0;
}
return key;
}
Run Code Online (Sandbox Code Playgroud)
下面的代码在我将它包装在using语句中后不起作用:
public static int GetLastInsertedID()
{
int key = 0;
try
{
using (SqlCeConnection conn = new SqlCeConnection(DbConnection.compact))
{
conn.Open();
using (SqlCeCommand cmd …Run Code Online (Sandbox Code Playgroud) 可以从匹配的函数typedef中干净地创建函数指针typedef吗?
// Can I define fx_pt in terms of fx_t without duplicating the signature?
// Does decltype allow for any new sort of trick here?
using fx_t = char(int, char, std::vector<float> const &);
using fxp_t = char(*)(int, char, std::vector<float> const &);
// Using function typedef to enforce interface for declarations and definitions.
fx_t foo, bar, baz;
char foo(int) { /* ... */ }
// Using fp typedef elsewhere as normal.
fxp_t whatever{bar};
whatever(99);
Run Code Online (Sandbox Code Playgroud)
我不希望任何关于函数(指针)typedef语法的内容对我来说完全直观,但我无法确定是否可以删除重复代码.
这可能与更大的类/原始typedef和类/原始指针typedef之间的转换有关,我记得听说它们之间没有可转换的...
我正在尝试利用using以下代码中的语句:
Uri uri = new Uri("http://localhost:50222/odata");
var container = new CourseServiceRef.Container(uri);
CourseServiceRef.NotNeeded newTempUser = new CourseServiceRef.NotNeeded()
{
Email = model.UserName,
Username1 = model.UserName
};
container.AddToNotNeededs(newTempUser);
container.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
但是这不会编译.为什么?
我正在制作一个跨平台的C#绘图库供我自己使用,模仿System.Drawing并使用尽可能多的标准System.Drawing类型(如PointF,RectangleF,Color和Pen).
不幸的是,iOS上没有提供Pen类.因此,在编译iOS时,我在System.Drawing中添加了这个,并且设计为与标准System.Drawing.Pen类尽可能兼容.到现在为止还挺好.
今天我添加了对线帽和连接样式的支持.在标准框架中(但不在iOS上),这些在System.Drawing.Drawing2D命名空间中定义.所以,我再次在仅在iOS上编译的代码中添加它们:
namespace System {
namespace Drawing {
namespace Drawing2D {
public enum LineCap {
Flat,
Round,
Square // (etc.)
}
}
public class Pen {
public Color Color;
public float Width;
public Drawing2D.LineCap StartCap;
public Drawing2D.LineCap EndCap;
// (etc.)
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们得到了奇怪的一点.在我的主程序中,我试图使用所有这些,我有"使用System.Drawing;" 在文件的顶部.我发现,即使在iOS上,我现在也可以直接使用Pen:
Pen p = new Pen(Color.Yellow, 6);
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试直接使用Drawing2D.LineCap,我会收到一个CS0103错误,"当前上下文中不存在名称'Drawing2D'."
p.StartCap = Drawing2D.LineCap.Round; // <-- ERROR
Run Code Online (Sandbox Code Playgroud)
为了使它工作,我必须完全限定名称,如下所示:
p.StartCap = System.Drawing.Drawing2D.LineCap.Round; // <-- OK (but sad)
Run Code Online (Sandbox Code Playgroud)
所以,我想明白为什么会这样.我知道当有两个版本的东西时,可能需要一个完全限定的名称,因此编译器无法解决你的意思.但在这种情况下我无法看到碰撞.据我所知,MonoTouch根本没有System.Drawing2D名称空间; 我给了它一个,那么问题是什么?
我是C++的初学者.据我所知,为了使用名称,我们必须包含由该名称组成的库.此后,我们可以预先添加命名空间的名称或使用using关键字.
例如
不使用关键字:
std::cout << "Hello Word!" << std::endl;
Run Code Online (Sandbox Code Playgroud)
使用关键字:
using namespace std;
cout << "Hello World!" << endl;
Run Code Online (Sandbox Code Playgroud)
我在网上看到了一个使用isalpha名称空间中locale库名称的在线代码示例std.但是,该样本不使用上述任何方法.
例如
#include <iostream>
#include <locale>
int main() {
std::cout << isalpha('a') << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么代码仍然有效吗?
using ×10
c# ×6
c++ ×4
namespaces ×3
std ×3
.net ×1
c++11 ×1
coding-style ×1
idisposable ×1
ios ×1
spweb ×1
typedef ×1
visual-c++ ×1
xamarin ×1