例如,假设我有一个i
类型的变量uint32_t
.打印它的预期方式是这样的:
printf("%"PRIu32"\n", i);
Run Code Online (Sandbox Code Playgroud)
但是,应该注意,要求long unsigned int
至少32位宽.正确的说明符long unsigned int
是%lu
.因此,上述陈述可以替换为:
printf("%lu\n", i);
Run Code Online (Sandbox Code Playgroud)
我想是的,因为我没有理由不这样做.但是,如果是,那么这将消除对PRIu32这些宏化说明符的存在的需要,所以我想我最好问一下.
我问它的原因是我想printf
动态创建一个格式字符串,如果我不知道字符串的大小PRIu32
扩展为(以及是否sizeof(PRIu32)
是否有效可能值得一个单独的问题).
在任何情况下,我认为它应该是有效的写:
printf("%lu\n", (long unsigned)i);
Run Code Online (Sandbox Code Playgroud) 从这个答案:
foreach (var key in dict.Keys.ToList())
{
dict[key] = false;
}
Run Code Online (Sandbox Code Playgroud)
对ToList()的调用使这个工作,因为它正在拉出并(暂时)保存键列表,因此迭代工作.
为什么ToList()
这里需要打电话?
我们正在修改值,而不是钥匙,而且,我最了解,仅modyfying设定一个词典的按键会打破遍历所有键.特别是 - 对我来说,可能是错误的理解 - 只有当我们在字典中添加或删除项目时才能改变键的顺序,我们没有这样做.
这是我第二次解决这个问题... 这是第二次在与State
monad 一起工作时,显然一个州喜欢由许多领域组成,而不仅仅是一个领域
我有一个元组:
type CurrentState = (Int, Int, String, [Int], CustType1, CustType2, CustType3 )
Run Code Online (Sandbox Code Playgroud)
假设需要对该元组进行简单的转换...第二个Int
是一种计数器,它需要增加:
let incrementCounter currState@(foo, bar, baz, fizz, buzz, blah, yadda) =
( foo, bar+1, baz, fizz, buzz, blah, yadda )
Run Code Online (Sandbox Code Playgroud)
哇。很多打字。现在,既然增加计数器并不是该元组的唯一可能操作,那么显然会有更多此类功能……混乱很快就会变得令人讨厌。
如果我们将元组更改为记录怎么办?
data CurrentState = CurrentState { foo :: Int, bar :: Int, baz :: String,
fizz :: [Int], buzz :: CustType1,
blah :: CustType2, yadda :: CustType 3 }
Run Code Online (Sandbox Code Playgroud)
现在增加计数器就更糟了!
let incrementCounter currState =
CurrentState { foo = foo currState, …
Run Code Online (Sandbox Code Playgroud) 在这里,我学到了一种有用的Haskell语法,可以在不完全重写记录的情况下修改记录的元素:
oldrecord { somefield = newvalue }
Run Code Online (Sandbox Code Playgroud)
元组是否有类似的可能?
type ABigTuple = (Int, Int, Double, Int, String)
aBigTuple :: ABigTuple
aBigTuple = (5, 6, 3.2, 10, "asdf")
anotherBigTuple = -- replace the 3rd elt of the prev tuple with 5.5 i/o 3.2
Run Code Online (Sandbox Code Playgroud)
这是否有可能类似于记录,还是我必须重写整个元组?
我不知道这是否通常是所有C ++代码的通用建议,但是至少在某些情况下,建议不要使用assert
宏,而是抛出异常。
我一直对此方法有疑问。我怎么知道哪条线触发了异常?
好吧,是的,我们有__LINE__
预处理器常量。但是,通过它并不容易。
我尝试的方法:
#include <stdexcept>
int main() {
throw std::logic_error("__LINE__");
}
Run Code Online (Sandbox Code Playgroud)
terminate called after throwing an instance of 'std::logic_error'
what(): __LINE__
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
好吧,这不正是我想要的。让我们再试一次:
#include <stdexcept>
int main() {
throw std::logic_error(__LINE__);
}
Run Code Online (Sandbox Code Playgroud)
wtf.cc: In function ‘int main()’:
wtf.cc:4:34: error: invalid conversion from ‘int’ to ‘const char*’ [-fpermissive]
throw std::logic_error(__LINE__);
^
In file included from wtf.cc:1:0:
/usr/include/c++/7/stdexcept:124:5: note: initializing argument 1 of ‘std::logic_error::logic_error(const char*)’
logic_error(const char*) _GLIBCXX_TXN_SAFE;
^~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
咄。我要什么 好的,让我们再试一次,这次正确了:
#include <stdexcept> …
Run Code Online (Sandbox Code Playgroud) #include <pthread.h>
pthread_mutex_t* mut;
int main()
{
mut = PTHREAD_MUTEX_INITIALIZER;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码吐出来了error: expected expression before ‘{’ token
.
#include <pthread.h>
pthread_mutex_t* mut = PTHREAD_MUTEX_INITIALIZER;
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
上面的代码吐出警告:标量初始化器周围的括号
那么我应该如何初始化互斥锁呢?
MS Visual Studio 2017,来自VisualC++类别的新Windows控制台应用程序项目.默认stdafx.h
标头包含以下行:
#include <stdio.h>
#include <tchar.h>
Run Code Online (Sandbox Code Playgroud)
在他们下面:
// TODO: reference additional headers your program requires here
Run Code Online (Sandbox Code Playgroud)
因为这个评论被放在下面,而不是上面#include <stdio.h>
,我倾向于认为stdio.h
默认情况下包含这个评论并不是为了方便用户#include
,但是出于某种原因需要它?stdio.h
包含而不仅仅是这个事实cstdio
似乎支持这种解释?
我对吗?我可以安全地删除#include <stdio.h>
吗?我问,因为我main
函数的第一行是:
std::ios_base::sync_with_stdio(false);
Run Code Online (Sandbox Code Playgroud)
如果stdio
正在使用设施,这显然是不正确的,因为包含的这个标题会提示.
1)我可以安全地删除#include <stdio.h>
从中说出的行stdafx.h
吗?
2)我可以安全地打电话std::ios_base::sync_with_stdio(false)
吗?
3)tchar.h
此处默认包含的事实是否相关?
我正在阅读有关ASP .NET Core和Razor Pages的教程.
其中一个,在处理BindProperty
属性时,有一些我觉得难以理解的评论:
默认情况下,Razor Pages仅使用非GET谓词绑定属性.绑定到属性可以减少必须编写的代码量.绑定通过使用相同的属性来呈现表单字段(
<input asp-for="Customer.Name" />
)并接受输入来减少代码.出于安全原因,您必须选择将GET请求数据绑定到页面模型属性.在将映射映射到属性之前验证用户输入.在处理依赖于查询字符串或路由值的方案时,选择此行为非常有用.
要在GET请求上绑定属性,请将
[BindProperty]
属性的SupportsGet
属性设置为true:[BindProperty(SupportsGet = true)]
(强调我的)来源:ASP.NET核心中的Razor页面简介§编写基本表单
我不明白.为什么在专门处理GET请求时需要采取额外的安全措施?
据我所知,GET请求应该比POST请求更安全,更安全,因为GET只检索数据,而POST则将数据发送到服务器.因此,POST请求通常需要额外的安全措施GET reqs不需要.
然而现在我正在读取用POST做X很好但是小心,不要肆无忌惮地使用GET,你必须选择加入并加以警告,采取预防措施!
为什么这些警告是必要的?将GET请求数据绑定到页面模型属性可以引入哪些安全漏洞?为什么这些漏洞不适用于POST请求?
我可以异步地将新行写入数据库:
await dbContext.Chatlogs.AddAsync(new ChatMessage(messageString, time, author));
await dbContext.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)
但是只是从数据库中读取内容呢?
string firstMessageEverPosted = dbContext.Chatlogs.OrderBy(msg => msg.time).First().content;
Run Code Online (Sandbox Code Playgroud)
不,await
这里 并且插入await
会导致编译错误:
string doesntWork = await dbContext.Chatlogs.OrderBy(msg => msg.time).First().content;
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了某些内容,或者无法异步读取数据库中的内容?如果是这样,我很好奇只是阅读内容的根本不同之处在于,允许异步执行此操作并不合适?
我有一个(非常复杂的)数据类型:
data SomeDataType = Constructor Blah Blah Blah | OtherConstructor Blah Yadda | YetAnotherConstructor Yadda Yadda Tittle | StillOneMoreConstructor Tittle Tattle Wish Wash
Run Code Online (Sandbox Code Playgroud)
现在,我发现自己想要另一种数据类型…具有两个构造函数。之一将是相同YetAnotherConstructor
的SomeDataType
; 另一个只会存储一个Double
。我有什么选择?
data WantedDataType = ConstructorName1 Double | ConstructorName2 SomeDataType
Run Code Online (Sandbox Code Playgroud)
虽然这可行,但也可以允许ConstructorName2 $ StillOneMoreConstructor tittle tattle wish wash
没有意义的东西。
data WantedDataType = ConstructorName1 Double | ConstructorName2 Yadda Yadda Tittle
Run Code Online (Sandbox Code Playgroud)
再说一次,这是可行的,但在我看来,这违反了DRY的规定,将东西往返于WantedDataType
和转换可能很乏味SomeDataType
。
data WantedDataType = ConstructorName1 Double | YetAnotherConstructor Yadda Yadda Tittle
Run Code Online (Sandbox Code Playgroud)
这就是我最想要的,但是不幸的是,Haskell似乎并不支持这种多态性(构造函数不能同时属于两种数据类型)。
我有什么选择?我该如何解决?
haskell ×3
c ×2
c# ×2
c++ ×2
tuples ×2
.net ×1
asp.net-core ×1
async-await ×1
asynchronous ×1
constructor ×1
dictionary ×1
exception ×1
int ×1
line-numbers ×1
mutex ×1
pthreads ×1
record ×1
security ×1
stdafx.h ×1
types ×1
visual-c++ ×1